在mockito spyed对象上断言是否有效?

时间:2015-01-02 01:55:42

标签: junit mockito

我正在监视一个像:

这样的对象
@Spy
@InjectMocks
private final A a= new A()

在测试用例中我断言A对象的属性。 间谍对象意味着调用实际方法,在spyed对象的属性上断言是否正确?

1 个答案:

答案 0 :(得分:0)

从技术上讲它会起作用,但我建议反对它,模拟价值对象通常是一个坏主意(甚至是反模式)。

  • 如果测试是为了验证属性是否已更改为特定值,则此对象是测试对象,因此没有理由将其作为间谍。
  • 如果使用当前API创建简单的值对象太困难,那么测试代码中存在可用性问题,需要重构或实用程序才能轻松创建有效实例。

只有在一些非常具体的边缘情况下,才需要@Spy@InjectMocks的组合。大多数时候不需要它,这样的测试显示了一个设计测试代码中的问题。

相反,只需创建一个真实对象,根据需要注入模拟并直接在测试对象上声明属性。一个好的间谍用法将验证两个协作对象之间是否存在交互。