Java Spock框架中的Mocking
我试着用Spock编写测试,但遇到了一些问题。 代码会告诉你更多。。。我的测试看起来像:Java Spock框架中的Mocking,java,testing,groovy,mocking,spock,Java,Testing,Groovy,Mocking,Spock,我试着用Spock编写测试,但遇到了一些问题。 代码会告诉你更多。。。我的测试看起来像: class MyServiceSpec extends Specification { private MyService myService private MyDAO myDAO def setup() { myDAO = Mock(MyDAO) myService = new MyServiceImpl(myDAO) } de
class MyServiceSpec extends Specification {
private MyService myService
private MyDAO myDAO
def setup() {
myDAO = Mock(MyDAO)
myService = new MyServiceImpl(myDAO)
}
def "Should get something"() {
given:
def user = Mock(User)
def date = now()
myDAO.getUsersSomethingFromDate(_ as User, _ as LocalDate) >> [ Mock(Something) ]
when:
myService.getUsersSomethingFromDate(user, date)
then:
1 * myDAO.getUsersSomethingFromDate(_ as User, _ as LocalDate)
}
}
MyDAO
是一个接口
。
我还尝试了不同的
设置
方法:
def setup() {
myDAO = Mock(MyDAO) {
getUsersSomethingFromDate(_ as User, _ as LocalDate) >> [ Mock(Something) ]
}
myService = new MyServiceImpl(myDAO)
}
尽管我声明方法getUsersSomethingFromDate
应该返回[Mock(Something)]
,但它返回null
。在下一次服务方法运行中,我收到了NullPointerException
,因为返回的是“null”,而不是模拟实例列表。
问题是,为什么声明了返回值的mock对象仍然返回
null
?将mock与调用计数检查相结合会出现问题,因为mock当时没有被调用
您可以通过以下方式重写组合测试以使其正常工作:
def "Should get something"() {
given:
def user = Mock(User)
def date = now()
when:
myService.getUsersSomethingFromDate(user, date)
then:
1 * myDAO.getUsersSomethingFromDate(_ as User, _ as LocalDate) >> [ Mock(Something) ]
}
请参见选中的。它是有效的。在某些方面,斯波克不是那么直观…:)Wired think is Spock允许使用
Mock(class){something()>>“something”}
并且Mock将返回“something”,但是如果我们使用1*something
它将返回null
,如果块中未指定返回,则:
块。