我有一个关于Spock测试控制器中list()方法的问题。我也是从Grails 1.x迁移到Grails 2.3.9。问题是如何让我创建的模拟对象对控制器可见,这样当我调用它上面的list()时它会看到模拟对象。
以下是受测控制器的代码:
class XxCatalogFormController {
def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[dpCatalogFormInstanceList: XxCatalogForm.list(), dpCatalogFormInstanceTotal: XxCatalogForm.count()]
}
这是我的Spock测试:
@TestFor(XpCatalogFormController)
@Mock([XxCatalogForm, DpCatalog])
@TestMixin(GrailsUnitTestMixin)
class XpCatalogFormControllerSpec extends Specification {
def 'list action: 1 dpCatalogForm'() {
setup:
mockDomain(XxCatalogForm, [dpCatalogFormInstance])
mockDomain(DpCatalog, [catalog])
params.max = 1
when:
expect:
controller.list() == [dpCatalogFormInstanceList: [dpCatalogFormInstance], dpCatalogFormInstanceTotal: 1]
where:
catalog = new DpCatalog(name: 'TestCatalog')
dpCatalogFormInstance = new XxCatalogForm(url: 'catalog_testForm.gsp',
catalog: catalog, confirmMessage: 'test', introBannerUrl: '/site/test.gsp',
successUrl: 'test.gsp', name: 'test')
}
以下是测试结果:
Condition not satisfied: controller.list() == [dpCatalogFormInstanceList: [dpCatalogFormInstance], dpCatalogFormInstanceTotal: 1] | | | | | | false com.kpi.dp.catalog.XxCatalogForm : (unsaved) | [dpCatalogFormInstanceList:[], dpCatalogFormInstanceTotal:0] com.kpi.dp.catalog.XxCatalogFormController@784f6502
junit.framework.AssertionFailedError: Condition not satisfied:
controller.list() == [dpCatalogFormInstanceList: [dpCatalogFormInstance], dpCatalogFormInstanceTotal: 1]
| | | |
| | false com.kpi.dp.catalog.XxCatalogForm : (unsaved)
| [dpCatalogFormInstanceList:[], dpCatalogFormInstanceTotal:0]
com.kpi.dp.catalog.XxCatalogFormController@784f6502
at com.kpi.dp.catalog.XxCatalogFormControllerSpec.list action: 1 dpCatalogForm(XxCatalogFormControllerSpec.groovy:64)
答案 0 :(得分:0)
无法确认测试类中使用了哪个mixin,修改测试类以使用@Mock
应该可行。使用@Mock
代替mockDomain()
。期望班级在test/unit
。
import grails.test.mixin.*
import spock.lang.Specification
@TestFor(XxCatalogFormController)
@Mock([DpCatalog, XxCatalogForm])
class XxCatalogFormControllerSpec extends Specification {
def 'list action: 1 dpCatalogForm'() {
given:
def catalog = new DpCatalog(name: 'TestCatalog')
def dpCatalogFormInstance = new XxCatalogForm(
url: 'catalog_testForm.gsp',
catalog: catalog,
confirmMessage: 'test',
introBannerUrl: '/site/test.gsp',
successUrl: 'test.gsp', name: 'test'
)
and:
params.max = 1
expect:
controller.list() == [
dpCatalogFormInstanceList: [dpCatalogFormInstance],
dpCatalogFormInstanceTotal: 1
]
}
}