假设我有以下代码:
public class ClassToTest
{
AnotherClass anotherClass;
public void methodToTest( int x, int y )
{
int z = x + y
anotherClass.receiveSomething( z );
}
}
public class AnotherClass
{
public void receiveSomething( int z ) {.. do something.. }
}
我想对变量 z 的值进行断言。我如何在不重构的情况下做到这一点?变量 x、y 和 z 可以是其他一些 Java 类类型,为了简单起见,我只使用“int”。
最佳答案
您可以编写以下内容。 当然,依赖注入(inject)和测试方法可能会根据您当前的实现和/或您的测试场景而改变。
@RunWith(MockitoJUnitRunner.class)
public class ClassToTestTest {
@Mock AnotherClass anotherClass;
@InjectMocks ClassToTest classToTest;
@Test public void ensure_that_value___Z___is_passed_to___AnotherClass() {
classToTest.methodToTest(1, 2);
verify(anotherClass).receiveSomething(eq(3));
}
}
在编写时考虑了 Mockito 1.9.5-rc1。
此外,您还可以使用 ArgumentCaptor
而不是使用 eq
匹配器,它将捕获值或值引用(在对象的情况下)。您将能够对捕获的值执行其他断言。例如使用 Truth 或 FEST-Assert。
这可能看起来像:
@RunWith(MockitoJUnitRunner.class)
public class ClassToTestTest {
...
@Captor ArgumentCaptor<List<Z>> listCaptor
@Test public void ensure_that_list_with_value___Z___is_passed_to___AnotherClass() {
// given
// when
...
// then
verify(anotherClass).receiveList(listCaptor.capture());
assertThat(listCaptor.getValue()).contains(Z);
}
}
干杯,
关于java - 在不重构的情况下使用 mockito 测试本地作用域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156516/