java - PowerMock 与依赖注入(inject)

标签 java unit-testing dependency-injection powermock

<分区>

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

所以我的问题是: 如果我可以用 PowerMock 模拟任何东西,还有实现依赖注入(inject)的理由吗?

最佳答案

在某些情况下,您会在其中一种情况下使用,有时会同时使用两种情况。这完全取决于您要测试什么。 Power Mock 让您更好地控制可以测试或不能测试的内容。而 DI 给你更直接的结果。

这里有一些例子: 假设您有匿名类(class)。

                @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 是唯一的方法。你只能模仿那个类的行为。

但是,如果您有一些具有多个类调用的乏味类,您可能需要考虑使用依赖注入(inject)来减少 spy /模拟的数量。

关于java - PowerMock 与依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48308476/

相关文章:

unit-testing - Java Card 小程序 EEPROM 与 RAM 测试

java - 在 Spring Beans 中初始化字段的正确方法是什么?

c# - 服务地点方便

c# - 在 .NET Core 类构造函数中注入(inject)接口(interface)的所有实现者

java - 如何根据 Map Interface Java 中的值检索键?

java - 如何使 Netbeans 更快地热部署到 Glassfish?

Java 嵌入式数据库 h2

Java -Jar "my project"未在 C.P 中执行(Windows)

.net - 测试类上的 Mstest ParallelTestCount 不是测试

c# - Always Freeze 使用 AutoFixture、XUnit 和 Moq 进行模拟