我整天都在论坛上尝试模拟一个类,但是没有一种解决方案对我有用,而且我也不知道我做错了什么(我是Java测试的新手)。 / p>
我有要测试的(重命名的)类,主要是每个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类)/添加依赖项注入,需要按原样对其进行测试。我试过了嘲笑,powerMock模拟,mockStatic,部分模拟等,它们都由于某种原因而失败,并且真正的getCurrentBar / getOtherBar被调用。
目前我可能正在获得隧道视野,但请告知。
答案 0 :(得分:0)
此代码是错误的,应该使用工厂来获取Foo,因此可以模拟工厂。但是,由于您无法修改它,因此下一个最好的方法就是使用PowerMock。
您可以按照本指南进行操作:https://github.com/powermock/powermock/wiki/MockConstructor确保不要忘记@RunWith和@PrepareForTest批注。