我有一个非常复杂的Android项目,我想开始进行相当彻底的测试。 所以我实现了依赖注入,以便能够测试几个组件(我使用了Kodein)。 然后我开始编写测试,我发现我必须使用PowerMock来模拟对File.create的调用。 PowerMock还可以模拟构造函数,工厂方法等。因此,基本上对于测试我可以实现相同的依赖注入结果,但不需要修改代码。
所以我的问题是: 如果我可以使用PowerMock模拟任何内容,是否还有理由实施依赖注入?
答案 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是唯一的方法。你只能模仿那个班级的行为。
但是,如果你有一些繁琐的类有多个类调用,你可能需要考虑使用依赖注入来减少间谍/模拟的数量。