1

假设我有以下代码:

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”。

4

1 回答 1

3

您可以编写以下内容。当然,依赖注入和测试方法可能会根据您当前的实现和/或您的测试场景而改变。

@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 编写。

此外,eq您可以使用 an 来代替使用匹配器ArgumentCaptor,这将捕获值或值引用(在对象的情况下)。您将能够对捕获的值执行其他断言。例如使用 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);
    }
}

干杯,

于 2012-08-28T09:52:28.803 回答