我正在尝试编写测试fillA
方法的单元测试。我需要验证doSmth
使用正确初始化的a
字段进行调用。
这是一个例子。
SecondClass secondClass = new SecondClass();
public void execute() {
A a = new A();
fillA(a);
secondClass.doSmth(a);
}
private void fillA(A a) {
a.setFirstField("first field");
a.setSecondField("second field");
}
class SecondClass {
public void doSmth(A a) {
// doSmth
}
}
class A {
private String firstField;
private String secondField;
// getters and setters
}
答案 0 :(得分:2)
要确保调用secondClass
,您应该使用Mockito.verify
。
verify():检查使用给定参数调用的方法 可以使用灵活的参数匹配,例如通过
any()
的任何表达式 或者使用@Captor
来捕获调用哪些参数。
例如:
Mockito.verify(secondClass).doSmth(<arg>);
如果您想检查a
字段是否已正确初始化,<arg>
可能是:
A的实例(new A("first field", "second field")
),如果A定义了合适的equals
使用equals()方法“
比较传递的参数
自定义A
ArgumentMatcher
ArgumentCaptor
答案 1 :(得分:0)
这是您需要的测试的基本结构。您需要模拟您的SecondClass
实例并将其注入您正在测试的课程中。我已将您的外部类命名为Bar
。
此代码假定您在.equals()
类上实现A
方法。
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class BarTest {
@Test
public void testAIsCorrectlyInitialized() throws Exception {
SecondClass secondClass = mock(SecondClass.class);
Bar bar = new Bar();
bar.setSecondClass(secondClass);
A expected = new A();
// here, populate "expected" with correct values
bar.execute();
// Verify call (assumes A implements a proper equals)
verify(secondClass).doSmth(expected);
}
}