2014-09-10 81 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" 
} 

,但我繼續收到錯誤「沒有這樣的屬性:X爲類mypackage.User」

我意識到這是因爲我嘲笑的「用戶」對象,而不是「用戶」類,所以我怎麼繞過事實上,我的代碼正在製作一個直接調用一個域類?

+0

你需要模擬'User'類。那有什麼問題? – Opal 2014-09-11 09:29:11

回答

1

使用Grails內置的@Mock註釋代替Spock的Mock()方法。像:

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

@Mock是爲了模擬Grails域的類。