単体テストには 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)は値フィールドが実際に null に設定されているクラスを作成するため、addValue()メソッドの values.add (value)はNPE をスローします。これを修正するためにaddValue()にnull チェックを追加することもできますが、値はすでに非 null と宣言されているため、それはばかげているように思えます。
Mockito に @NonNull アノテーションを尊重させ、フィールドを適切に初期化する方法はありますか?