gpt4 book ai didi

java - 添加附加 stub 时调用第一个 stub

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:14 28 4
gpt4 key购买 nike

我有以下要测试的对象:

   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() 方法进行 stub 处理,以便它为特定参数返回一个值,否则会抛出一个由 MyObject.readFiles 处理的 IOException。

这里奇怪的是第二个 stub (downloader.download("testFile")) 抛出第一个 stub (downloader.download(anyString())))。我已经通过在我的第一个 stub 中抛出一个不同的异常来验证这一点。

有人能解释一下为什么在添加额外的 stub 时抛出异常吗?我认为创建 stub 不会调用方法/其他 stub 。

最佳答案

问题是当你写

when(downloader.download("testFile")).thenReturn("mockContent");

首先要调用的是 downloader.download,您已经 stub 以抛出异常。

解决方案是使用 Mockito 提供的稍微更通用的 stub 语法。这种语法的优点是它在 stub 时不调用实际方法。

doThrow(IOException.class).when(downloader).download(anyString());
doReturn("mock content").when(downloader).download("test file");

我在 my answer here 中列出了第二种语法的其他优点

关于java - 添加附加 stub 时调用第一个 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335197/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com