Java Mockito在调用方法之前验证mock中设置的变量

Java Mockito在调用方法之前验证mock中设置的变量,java,unit-testing,testing,mockito,powermock,Java,Unit Testing,Testing,Mockito,Powermock,我正试图围绕一些遗留代码编写一些单元测试,我正在努力解决如何测试一段代码。模式基本上是: Foo foo = ObjectGetter.getObject(Foo.class); foo.setVariableX("X"); foo.setVariableY("Y"); foo.performExecute(); //The Foo object has now run some business logic String bar = foo.getVariableZ(); 我已经通过Powe

我正试图围绕一些遗留代码编写一些单元测试,我正在努力解决如何测试一段代码。模式基本上是:

Foo foo = ObjectGetter.getObject(Foo.class);
foo.setVariableX("X");
foo.setVariableY("Y");
foo.performExecute();
//The Foo object has now run some business logic
String bar = foo.getVariableZ();
我已经通过PowerMock模拟了静态ObjectGetter类,并设法通过模拟的Foo对象。我现在要做的是,在运行performExecute时,检查变量X&Y是否在Foo中设置为预定值,但实际上不在Foo中运行任何代码。然后,当调用getVariableZ时,返回一个特定的值


我可以让VariableZ传回我想要的任何东西,但我无法解决如何使变量X和Y设置为特定值的条件!我正在使用Mockito和PowerMock。我只想说,由于各种原因,我无法更改正在测试的代码。

如果您想验证mock
foo
中的某些方法是否正确调用,只需编写

Mockito.verify( foo, Mockito.times(1)).setVariableX("x");

如果对象
foo
的方法
setVariableX
没有被精确调用一次,这将导致测试失败。您无法真正测试变量“x”,因为它实际上不存在于您的模拟中,但您可以验证setter是否被正确调用。

如果您想验证mock
foo
中的某些方法是否被正确调用,您可以简单地编写

Mockito.verify( foo, Mockito.times(1)).setVariableX("x");

如果对象
foo
的方法
setVariableX
没有被精确调用一次,这将导致测试失败。您无法真正测试变量“x”,因为它实际上不存在于您的模拟中,但您可以验证setter是否被正确调用。

我不明白。如果你在模仿
Foo
,为什么你会关心它在内部做什么呢?我想确保这个代码运行的类已经向Foo传递了正确的参数,否则我只会盲目地假设它有错误,并且可能会错过错误。实际上,我并不关心它在内部做什么,只是它已经传递了正确的参数。那么你应该作为一个单元测试
Foo
,而不是模仿它。我不明白。如果你在模仿
Foo
,为什么你会关心它在内部做什么呢?我想确保这个代码运行的类已经向Foo传递了正确的参数,否则我只会盲目地假设它有错误,并且可能会错过错误。实际上,我并不关心它在内部做什么,只是它已经传递了正确的参数。然后,您应该作为一个单元测试
Foo
,而不是模拟它。