テストしたい次のオブジェクトがあります。
public class MyObject {
@Inject
Downloader downloader;
public List<String> readFiles(String[] fileNames) {
List<String> files = new LinkedList<>();
for (String fileName : fileNames) {
try {
files.add(downloader.download(fileName));
} catch (IOException e) {
files.add("NA");
}
}
return files;
}
}
これは私のテストです:
@UseModules(mockTest.MyTestModule.class)
@RunWith(JukitoRunner.class)
public class mockTest {
@Inject Downloader downloader;
@Inject MyObject myObject;
private final String[] FILE_NAMES = new String[] {"fail", "fail", "testFile"};
private final List<String> EXPECTED_FILES = Arrays.asList("NA", "NA", "mockContent");
@Test
public void testException() throws IOException {
when(downloader.download(anyString()))
.thenThrow(new IOException());
when(downloader.download("testFile"))
.thenReturn("mockContent");
assertThat(myObject.readFiles(FILE_NAMES))
.isEqualTo(EXPECTED_FILES);
}
public static final class MyTestModule extends TestModule {
@Override
protected void configureTest() {
bindMock(Downloader.class).in(TestSingleton.class);
}
}
}
anyString()
特定の引数のマッチャーを上書きしています。メソッドをスタブ化しdownload()
て、特定の引数の値を返すようにし、それ以外の場合は によって処理される IOException をスローしMyObject.readFiles
ます。
ここで奇妙なのは、2 番目のスタブ ( downloader.download("testFile")
) が最初のスタブ ( ) で設定された IOException をスローすることdownloader.download(anyString())
です。最初のスタブで別の例外をスローすることで、それを検証しました。
追加のスタブを追加するときに例外がスローされる理由を誰かが説明できますか? スタブを作成してもメソッド/他のスタブは呼び出されないと思いました。