gpt4 book ai didi

java - 模拟辅助方法的返回值

转载 作者:行者123 更新时间:2023-11-29 04:17:23 25 4
gpt4 key购买 nike

我正在尝试使用 Mockito 测试这段代码

if (writeToDisk(filename, byteArray)){
return "URI1"
} else {
return "URI2"
}

由于 writeToDisk 旨在在 unix 服务器上运行,因此使用缓冲+fileWriter 写入“/tmp/upload”。问题是我在 Windows 机器上编写单元测试,writeToDisk 总是返回 false,因为 java 在 Windows 上找不到“/tmp/upload。

有什么方法可以模拟 writeToDisk 的结果,一个 package 私有(private)方法?

这就是 writeToDisk 所做的:

boolean writeToDisk(String filename, byte[] data){
boolean writeSuccessful = false;
try (BufferedWriter writer = new BufferedWriter(new FileWriter("/tmp/upload"+ filename"))){
for (byte current : data){
out.write(current);
}
writeSuccessful =true;
} catch (IOException e) {
LOG.debug(e);
}
return writeSuccessful;
}

最佳答案

真正的答案在这里:

try (BufferedWriter writer = new BufferedWriter(new FileWriter("/tmp/upload"+ filename"))){

您在这里硬编码了很多东西,比如那个(特定于操作系统的)路径,以及确切的编写器类型。这使得这个客户(只想在某个地方写东西)非常依赖所有这些方面。因此,它变得非常难以测试!

您可以轻松地将所有这些方面转变为某种服务,您只需前往:

try (Writer writer = service.getWriterFor(filename))

(或类似的东西,只是在这里提供一些灵感)

您可以轻松模拟该服务,直接使您也可以将该代码单元化。

这将只是一个非常小的抽象(可能是一些@FunctionalInterface,可以在生产中使用一个很好的 lambda 或方法引用来初始化)。

关于java - 模拟辅助方法的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51486497/

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