我有以下要测试的对象:
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()
方法进行存根,以便它返回一个特定参数的值,否则抛出一个由MyObject.readFiles
.
这里奇怪的是第二个存根 ( downloader.download("testFile")
) 抛出了在第一个存根 () 中设置的 IOException downloader.download(anyString())
。我已经通过在我的第一个存根中抛出一个不同的异常来验证这一点。
有人可以解释一下为什么在添加额外的存根时会引发异常吗?我认为创建存根不会调用方法/其他存根。