gpt4 book ai didi

java - Mockito - 无需注入(inject)的模拟依赖

转载 作者:行者123 更新时间:2023-12-01 17:39:43 25 4
gpt4 key购买 nike

我一整天都在浏览论坛试图模拟一个类,但是没有一个解决方案对我有用,而且我不知道我做错了什么(我是 Java 测试的新手)。

我想测试这个(重命名的)类,主要是每个 if 条件以确保它们工作:

public class MyClass {
public static List<Object> MyClass(@NotNull Session session, @NotNull MyObject updated, @NotNull Mode mode)
throws Exception {
ModeList modes = MyUtil.geModes(mode);

try {
final Transaction tr = updated.getTransaction();
MyObject original;

if(tr == null) {
original = new Foo().getCurrentBar(session, updated.getKey(), null, "en");
} else {
original = new Foo().getOtherBar(session,
updated.getKey(),
tr.getProp1().intValue(),
tr.getProp2().intValue(),
"en");
}

return SomeClass.check(updated, original, modes);
} catch (Exception ex) {
// handle
}

return null;
}
}

请注意,我无法更改此(或 Foo 类)/添加依赖项注入(inject),它需要按原样进行测试。我尝试过mockito,powerMock模拟,mockStatic,部分模拟等,它们都因某种原因失败,并且真正的getCurrentBar/getOtherBar被调用。

此时我可能视野狭隘,但请指教。

最佳答案

这段代码是错误的,它应该使用工厂来获取Foo,这样你就可以模拟工厂了。但由于您无法修改它,那么下一个最好的办法就是使用 PowerMock。

您可以按照本指南操作:https://github.com/powermock/powermock/wiki/MockConstructor确保您不要忘记 @RunWith 和 @PrepareForTest 注释。

关于java - Mockito - 无需注入(inject)的模拟依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60976416/

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