1
我是Grails的新手,希望對使用@Validateable
和@BindUsing
的命令類進行單元測試。像往常一樣,Grails文檔沒有關於它的信息。有什麼建議麼?如何使用@Validateable和@BindUsing單元測試Grails命令對象
當我在它的時候,我該如何測試相應的控制器?
@Validateable
@ToString
class SearchMovieRipCommand {
MovieRipSearchService movieRipSearchService
@BindUsing({
obj, source -> source['fieldName']?.trim()
})
String fieldName
// more fields, omitted for brevity
Collection<MovieRip> search() {
log.debug("fieldName: ${fieldName}, fieldValue: ${fieldValue}, max: ${max}.")
movieRipSearchService.search(fieldName, fieldValue, max)
}
}
class MovieRipController {
def show(final SearchMovieRipCommand cmd) {
respond(cmd.search())
}
}
查找[測試命令對象](http://grails.org/doc/latest/guide/testing.html#unitTestingControllers)。 – dmahapatro 2014-12-03 00:25:23
@dmahapatro對不起,但我在提問之前已經查看了文檔的這一部分。我的命令對象使用一個服務。我想嘲笑這一點,並定義模擬方法的行爲。我猜我可以使用'@ ServiceUnitTestMixin',但不知道如何定義方法的行爲。 Grails文檔傾向於說明最明顯的。他們的Javadoc停了下來,沒有什麼可悲的。 – 2014-12-03 04:24:54
我改變了使用getter而不是字段訪問的命令。 'getMovieRipSearchService()。search'。然後,我編寫了以下測試,但失敗後沒有發生調用錯誤。 @TestFor(MovieRipController) 類MovieRipControllerSpec延伸規格{ \t @Shared MovieRipSearchService mockService =假() DEF setupSpec(){ \t SearchMovieRipCommand.metaClass.getMovieRipSearchService = { - > \t \t mockService \t} } (){ \t //省略 \t then: ngSpace','',100) } } – 2014-12-03 18:01:40