我尝试用where写一些测试,但是看起来where块中提到的数据没有被传递,(我发现值为null)。
def "method response should contain count as expected" () {
given:
SomeServiceImpl service = applicationContext.getBean(SomeServiceImpl.class)
when:
mockConnector.getResponse(userId) >> responseData
service.setTokenConnector(mockConnector)
ResponseData res = tokenService.getAllData(userId)
def count = ((ListResponseMeta)(res.getMeta())).getCount()
then:
count == expected
where:
responseData | expected
tokenInfos | 1
null | 0
}
tokenInfos
之前被初始化为具有一些值的对象数组。
@Shared
@AutoCleanup
Info[] tokenInfos = null
def setup() {
tokenInfos = getMockInfoBody()
mockTokenConnector = Mock(SampleConnector.class)
}
private static Info[] getMockInfoBody() {
Info infoDeactivated = new Info("123", "http://abc.xyz.com", "D")
Info infoActive = new Info("234", "http://abc.xyz.com", "A")
Info infoSuspended = new Info("235", "http://abc.xyz.com", "S")
Info[] tokenInfos = new Info[3]
tokenInfos[0] = infoDeactivated
tokenInfos[1] = infoActive
tokenInfos[2] = infoSuspended
return tokenInfos
}
我尝试在when
块中移动responseData,以前responseData
正在given
块中使用。请在此处提供帮助。
1条答案
按热度按时间0s7z1bwu1#
我会试着回答,但正如@krigaex指出的,没有minimal, complete, and verifiable example很难确定。
有很多事情是错误的或没有效果的。
@AutoCleanup
将调用字段对象上的close()
方法,这里的字段是一个数组,没有close()
方法。1.你声明
tokenInfos
为@Shared
,但是你只在第一次setup()
调用时初始化它,这对于where
块的第一个条目来说太晚了,所以,要么直接初始化字段,要么把赋值移到setupSpec
。目前,你的were方法基本上是这样的