PowerMock vs依赖注入

时间:2018-01-17 19:19:59

标签: java unit-testing dependency-injection powermock

我有一个非常复杂的Android项目,我想开始进行相当彻底的测试。 所以我实现了依赖注入,以便能够测试几个组件(我使用了Kodein)。 然后我开始编写测试,我发现我必须使用PowerMock来模拟对File.create的调用。 PowerMock还可以模拟构造函数,工厂方法等。因此,基本上对于测试我可以实现相同的依赖注入结果,但不需要修改代码。

所以我的问题是: 如果我可以使用PowerMock模拟任何内容,是否还有理由实施依赖注入?

1 个答案:

答案 0 :(得分:1)

在某些情况下,您会使用一个而不是另一个,有时两者都使用。这一切都取决于你在测试什么。 Power Mock让您可以更好地控制您可以测试或不能测试的内容。虽然DI会给你更直接的结果。

以下是一些例子: 如果你有匿名课,那就说吧。

                @Override
                public Query getQuery() {
                    Query q = Query.empty();
                    if (wp.minSpeed < 0)
                        q = Query.and(q, Query.eq(Speed.Function, WayPoint));
                    else {
                        q = Query.and(q, Query.eq(Speed.Function, Field));
                        q = Query.and(q, Query.eq(Speed.Calc, wp.maxSpeed-wp.minSpeed));
                    }
                    q = Query.and(q, Query.eq(Speed.Id, wp.altitude/greatCircle));
                    return q;
                }

由于无法测试匿名类以实现100%的覆盖率。你应该知道power mockito是唯一的方法。你只能模仿那个班级的行为。

但是,如果你有一些繁琐的类有多个类调用,你可能需要考虑使用依赖注入来减少间谍/模拟的数量。