我嘲笑的其中一个对象必须转换为JSON,但Spock似乎不支持嘲笑转换。如何选择返回哪个JSON?
我想要实现的目标:
def "convert as JSON"()
{
when:
def product = Mock(Product)
println(product as JSON)
then:
1* (product as JSON) << (["message": "message"] as JSON)
}
然而,这不起作用。
编辑:模拟对象转换为JSON的方式很有用,因为我想要实现的是测试另一个类的方法,它将产品作为参数并使用它,调用&#34;作为JSON&# 34;在产品执行过程中。由于产品可能很复杂并且有很多依赖关系和字段,我更喜欢模仿它们。 Spock然后控制模拟产品方法的输出,但是当需要转换时会变得更加棘手......
答案 0 :(得分:1)
在测试中,您尝试降低对象(Product
)的复杂性,以使测试更简单。这有两个原因:
干净/更好的解决方案是重构Product
,直到它可以轻松创建,你不再需要嘲笑它。根据我对您的具体情况的了解,Product
是一个数据对象(如Integer
,Long
,BigDecimal
)。它只是编码状态而没有自己的功能。
如果这是真的,那么在没有嘲笑的情况下创建测试用例应该很简单。如果您需要模拟数据对象,那么您的代码就会出现问题。只有像服务这样的东西才需要模拟 - 代码作用于数据对象,并且具有你需要为测试切割的外部依赖性。
第二个论点是你正在编写通过但不讲故事的测试。这是一个复杂的形式,有10'000个测试只包含assertTrue(true);
。虽然在测试计数方面它是一件好事,但它并没有给你一个优势,而不是没有它们。