gpt4 book ai didi

java - 是否可以使用 JMockit 来模拟局部变量?

转载 作者:行者123 更新时间:2023-11-30 04:21:20 24 4
gpt4 key购买 nike

被测单元如下:

@Component(value = "UnitUnderTest")
public class UnitUnderTest {

@Resource(name = "propertiesManager")
private PropertiesManager prop;

public List<String> retrieveItems() {
List<String> list = new ArrayList<String>();
String basehome = prop.get("FileBase");
if (StringUtils.isBlank(basehome)) {
throw new NullPointerException("basehome must not be null or empty.");
}


File target = new File(basehome, "target");
String targetAbsPath = target.getAbsolutePath();
File[] files = FileUtils.FolderFinder(targetAbsPath, "test");//A utility that search all the directories under targetAbsPath, and the directory name mush match a prefix "test"

for (File file : files) {
list.add(file.getName());
}
return list;
}
}

测试用例如下:

public class TestExample {
@Tested
UnitUnderTest unit;
@Injectable
PropertiesManager prop;

/**
*
*
*/
@Test
public void retrieveItems_test(@NonStrict final File target,@Mocked FileUtils util){
new Expectations(){
{
prop.get("FileBase");
result="home";
target.getAbsolutePath();
result="absolute";
FileUtils.FolderFinder("absolute", "test");
result=new File[]{new File("file1")};
}
};
List<String> retrieveItems = logic.retrieveItems();
assertSame(1, retrieveItems.size());
}
}

失败了。 retrieveItems 的实际结果为空。我发现“FileUtils.FolderFinder(targetAbsPath, "test")”总是返回一个空File[]。这确实很奇怪。

这可能是因为我也 mock 了文件实例“目标”。如果我只模拟静态方法 FileUtils.FolderFinder,它就可以正常工作。

有谁知道问题出在哪里吗?是否可以像我这里需要的那样模拟局部变量实例?比如这个目标实例?

非常感谢!

最佳答案

问题是我应该定义我想要模拟的方法。

    @Test
public void retrieveItems_test(@Mocked(methods={"getAbsolutePath"}) final File target,@Mocked FileUtils util){
new Expectations(){
{
prop.get("FileBase");
result="home";
target.getAbsolutePath();
result="absolute";
FileUtils.FolderFinder("absolute", "test");
result=new File[]{new File("file1")};
}
};
List<String> retrieveItems = logic.retrieveItems();
assertSame(1, retrieveItems.size());
}

这样就可以了。

关于java - 是否可以使用 JMockit 来模拟局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952332/

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