gpt4 book ai didi

java - 使用 Mockito 模拟文件、FileReader 和 BufferedReader 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:10 33 4
gpt4 key购买 nike

我在要测试的方法中得到了以下代码

File f = map.get("key1")
BuffereReader r = new BufferedReader(new FileReader(f));
String line=null;
do {
line=r.readLine();
} while(r!=null);

我想模拟这个操作,这样我就可以从 JUnit 测试用例中传递文件的内容。我在下面做了:

Map fles = Mockito.mock(ConcurrentHashMap.class);
File file = Mockito.mock(File.class);
Mockito.when(files.get("key1")).thenReturn(file);

FileReader fileReader = Mockito.mock(FileReader.class);
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);

try {
PowerMockito.whenNew(FileReader.class).withArguments(file).thenReturn(fileReader);
PowerMockito.whenNew(BufferedReader.class).withArguments(fileReader).thenReturn(bufferedReader);
PowerMockito.when(bufferedReader.readLine()).thenReturn("line1")
.thenReturn("line2").thenReturn("line3");

} catch (Exception e) {
Assert.fail();
}

所以基本上我需要将“line1”、“line2”和“line3”作为文件中的行传递,这些行由模拟的 BufferedReader 读取。

然而,在尝试实例化新的 FileReader(f) 部分时,它会作为 NullPointerException 失败。

那是因为我不能模拟 BufferedReader 还是方法不对?

谢谢

最佳答案

您可以提取一种方法来进行实际阅读,然后对其进行测试。那意味着你只需要模拟一个读者。例如,您的代码将是这样的:

public void aMethod(){
File f = map.get("key1")
BuffereReader r = new BufferedReader(new FileReader(f));
readStuff(r);
}

public void readStuff(BufferedReader r){
String line=null;
do {
line=r.readLine();
} while(r!=null);
}

那么你的测试代码会更像下面这样:

BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
Mockito.when(bufferedReader.readLine()).thenReturn("line1", "line2", "line3");
objUnderTest.readStuff(bufferedReader);
//verify result

关于java - 使用 Mockito 模拟文件、FileReader 和 BufferedReader 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18977057/

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