我正在使用 Android SDK 和 junit4 + Mockito 进行单元测试。假设我的应用中有这样的课程:
public class Container{
@NonNull private Set<String> values = new HashSet<>();
public void addValue(String value) {
values.add(value);
}
@NonNull
public Set<String> getValues() {
return values;
}
}
而且我还有一个使用 Mockito 的单元测试,如下所示:
public class ContainerTest {
private Container container;
@Before
public void before() {
container = mock(Container.class);
}
@Test
public void shouldAddValue() {
container.add("test_value");
assertTrue(container.getValues.contains("test_value"));
}
}
这个测试实际上在 "container.add("test_value");" 行失败了 因为mock(Container.class)创建了一个类,其中values字段实际上设置为 null,所以addValue()方法中的values.add( value)会抛出 NPE。我可以在addValue()中添加一个空检查来解决这个问题,但这似乎很荒谬,因为值已经被声明为非空。
有什么方法可以让 Mockito 尊重 @NonNull 注释并正确初始化该字段?