Mockito-模拟依赖,无需注入

时间:2020-04-01 17:05:26

标签: java mockito powermock

我整天都在论坛上尝试模拟一个类,但是没有一种解决方案对我有用,而且我也不知道我做错了什么(我是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被调用。

目前我可能正在获得隧道视野,但请告知。

1 个答案:

答案 0 :(得分:0)

此代码是错误的,应该使用工厂来获取Foo,因此可以模拟工厂。但是,由于您无法修改它,因此下一个最好的方法就是使用PowerMock。

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