我是使用Spock在Grails应用程序中进行单元测试的新手。不过,我想问一下以下问题。假设我想为以下函数testfun运行测试。Grails Spock嘲笑一个对象
class TestFun{
boolean testfun(long userId, long orderId){
User user = User.findByUserId(userId)
if(user == null)return false
Order order = Order.findByUserAndId(user, orderId)
HashMap<String, Object> = orderContent
orderContent= order.orderContent // the order has an element orderContent for storing the elements that one user orders
if(orderContent!=null){
orderContent.put("meal",1)
order.orderContent = orderContent
return true
}
return false
}
}
在这种情况下,相应的单元测试是:
class TestFun extends Specification {
def setup() {
GroovySpy(User, global: true)
GroovySpy(Order, global: true)
}
def "test funtest"() {
User user = new User(2).save()
Order order = new Order(3).save()
when:
service.testfun(2,3) == result
then:
2*User.findByUserId(2) >> Mock(User)
1*Order.findByUserAndId(_ as User, 1)>> Mock(Order)
result == true
}
}
不过,我觉得我有嘲笑order.orderContent,我不知道如何嘲笑它。现在测试失败,因为orderContent为null,所以testfun返回false。
任何人都可以帮助我吗?
非常感谢您MND您的时间来写这个答案。不幸的是,当我尝试做类似的事情时,测试失败了,因为它不会返回true,而是错误的。 – Ectoras
@Ectoras,我只是再次查看代码,它返回null,因为'orderContent'是空的 - 我没有提供,当保存Order对象时。我会建议添加一个元素来查看它是否有效。如果这不起作用,请包括“Order”和“Users”类的完整代码,然后我可以帮你解决。 – mnd