Junit 在mockito间谍对象上断言是否有效?

Junit 在mockito间谍对象上断言是否有效?,junit,mockito,Junit,Mockito,我在监视一个物体,比如: @Spy @InjectMocks private final A a= new A() 在测试用例中,我断言一个对象的属性。 由于监视对象意味着调用实际方法,因此断言被监视对象的属性是否正确?从技术上讲,这是可行的,但我建议不要这样做,即使是模拟值对象的反模式,通常也是个坏主意 如果测试是为了验证属性是否已更改为特定值,则此对象就是测试对象,因此没有理由将其作为间谍。 如果用当前的API创建一个简单的值对象太困难,那么测试代码中就存在可用性问题,需要重构或实用程序来

我在监视一个物体,比如:

@Spy
@InjectMocks
private final A a= new A()
在测试用例中,我断言一个对象的属性。
由于监视对象意味着调用实际方法,因此断言被监视对象的属性是否正确?

从技术上讲,这是可行的,但我建议不要这样做,即使是模拟值对象的反模式,通常也是个坏主意

如果测试是为了验证属性是否已更改为特定值,则此对象就是测试对象,因此没有理由将其作为间谍。 如果用当前的API创建一个简单的值对象太困难,那么测试代码中就存在可用性问题,需要重构或实用程序来轻松创建有效实例。 只有在一些非常特殊的边缘情况下,才需要@Spy和@injectmock的组合。大多数情况下,它是不需要的,这样的测试在测试代码中显示了一个设计问题


相反,只需创建一个真实的对象,在需要时注入mock,并直接在测试对象上断言属性。一个好的间谍用法是验证两个协作对象之间是否只存在交互。

您尝试过吗?它有用吗?如果它有效并且表达了您想要测试的内容,那么是的,它是有效的。嗨,斯卡夫曼,是的,它有效。我只是想知道,如果我检查spyed变量的值,它会显示一个模拟值。