2014-09-10 4 views
0

내가 다음 코드 줄이Grails의과 단위 테스트의 도메인 호출/스팍

username = username.stripIndent() 
user = User."${databaseInstance}".findByUsername(username) 
if (user == null){ 
    return "User does not exist" 
} 

내가 함께 단위 테스트에이 기능을 시도하고있다 피하는 방법 :

def setup() { 
    def mockUser = Mock(User) 
    myClass.user = mockUser 
} 

void "userNotFoundGetUserInfo"(){ 
    given: 
    myClass.databaseInstance = 'X' 
    _ * mockUser._ >> null 

    when: 
    def result = myClass.getUserInfo(username) 

    then: 
    result == "User does not exist" 
} 

하지만 난을 "No such property : X for class mypackage.User"가 계속 나타납니다.

"User"객체가 아니라 "User"클래스를 조롱했기 때문에 이것이 실현되었습니다. 사실 내 코드가 도메인 클래스에 대한 직접 호출?

+0

'User' 클래스를 조롱해야합니다. 그게 뭐가 문제 야? – Opal

답변

1

Spock의 Mock() 메소드 대신에 @Mock 빌트인 Grails를 사용하십시오.

@Mock(User) 
class YourTestSpecification extends Specification { 
    def setup() { 
     myClass.user = new User() 
    } 
} 

@Mock이 Grails의에게 도메인 클래스를 조롱하기위한 것입니다 :처럼 이동합니다.