我是使用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