【问题标题】:Mockito - Mock dependency without injectionMockito - 模拟依赖而不注入
【发布时间】:2020-04-01 17:05:26
【问题描述】:

我整天都在看论坛试图模拟一个类,但没有一个解决方案对我有用,而且我不知道我做错了什么(我是 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 类)/添加依赖注入,它需要按原样进行测试。我尝试过 mockito、powerMock mock、mockStatic、partial mocks 等,它们都因某种原因而失败,而真正的 getCurrentBar / getOtherBar 被调用。

此时我可能会得到隧道视野,但请告知。

【问题讨论】:

    标签: java mockito powermock


    【解决方案1】:

    这段代码是错误的,它应该使用工厂来获取 Foo,所以你可以模拟工厂。但既然你不能修改它,那么下一个最好的办法就是使用 PowerMock。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多