我整天都在论坛上尝试模拟类,但是没有一种解决方案对我有用,而且我也不知道我做错了什么(我是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类)/添加依赖项注入,需要按原样进行测试。我尝试过模仿,powerMock模仿,mockStatic,部分模仿等,它们都由于某种原因而失败,并且真正的getCurrentBar / getOtherBar被调用。
此时我可能正在获得隧道视野,但请提出建议。
我整天都在论坛上尝试模拟类,但是没有一种解决方案对我有用,而且我也不知道我做错了什么(我是Java测试的新手)。我有这个(重命名)...
此代码是错误的,应该使用工厂来获取Foo,因此您可以模拟工厂。但是,由于您无法修改它,因此下一个最好的方法是使用PowerMock。