问题标签 [powermock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
76820 浏览

java - 使用 PowerMock 模拟来自多个类的静态方法

我知道如何使用 PowerMock 从类中模拟静态方法。
但我想使用 JUnit 和 PowerMock 在测试类中模拟来自多个类的静态方法。

谁能告诉我是否有可能做到这一点以及如何做到这一点?

0 投票
2 回答
4249 浏览

maven - 未找到 Maven 测试依赖项

我声明了一个对 powermock 的测试依赖,其中包含了 easymock。

当我运行mvn test时,测试 src 声称能够找到org.powermock但不能org.easymock,尽管它包含在上述依赖项中。

我想知道这是否是由于测试范围的传递性造成的问题,所以我也尝试了编译范围(因为文档http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html提到编译依赖项在测试时可用)没有任何运气。

我也尝试过使用捆绑的 jar 而不是 pom,但无济于事。我意识到我可以单独声明依赖项(即 powermock 和 easymock 的单独依赖项),但出于我的目的,我仅限于一个依赖项,包括所有必要的测试库。

0 投票
3 回答
4564 浏览

java - 当从第三个(插件)引用时,Powermock 导致 Eclipse 中 JUnit Plugin-Test 的 ClassNotFoundException

我正在 Eclipse 中编写 JUnit-Tests 来测试没有 Maven的 RCP-Eclipse-Application 。对于某些测试用例,必须使用 Powermock(使用 Easymock)来模拟对象创建和静态方法。

我有一个包含应该是 testet 的类的插件和包含相应测试的第二个插件。让我们捐赠它们 PluginObject 和 PluginTest:

工作情况:

使用 PLuginTest 中带有 powermock-Jar 的配置,TestCase 和 Plugins-Manifest-Runtim 中的配置运行正常并返回所需的结果。

我的 TestCase 从以下几行开始,当前使用@RunWith -Annotation:


但是我有多个插件想要在我的应用程序中使用 Powermock 进行模拟,这对我来说将共享库提取到另一个特殊插件似乎是个好主意 - 我们称之为 Test.Util:

对于除 Powermock 之外的所有其他库,我没有任何问题,但是当我将 Powermock 从 PluginTest 移动到 Test.Util-Plugin 时,在启动 JUnit Plugin-Test 时初始化时出现“ClassNotFoundException”。(正常的 JUnit-Test 不会抛出此错误)

我在 MANIFEST.MF 的 Runtime 下的 Classpath 中配置了 Test.Util,并导出了这些插件的每个包。在 Eclipse 中,正确的库是从 TestCase 链接的。

我还使用带有 JUnit-Rule 而不是@RunWith的 Bootstrapping ,但它会导致相同的 ClassNotFoundException。问题没有改变。

我现在尝试了很多东西 - 重新配置插件测试的运行配置,在清单中设置 ClassPath: .\,延迟/非延迟加载以及为 PluginTest 和 Test.Util-Plugin 设置 Buddy-ClassLoading。

经过数小时的网络尝试和搜索,我仍然不知道为什么 Powermock 会导致此异常,如果它是从 Test-Plugin 提取到第三个插件中,以及我如何使这项工作正常工作。我目前不能说我的应用程序中是否有错误配置。

有谁遇到过相同或类似的问题,或者得到了很好的解决方案?

0 投票
3 回答
20161 浏览

java - 使用 PowerMock、Mockito 和 TestNG 模拟公共方法中使用的私有方法

我想为我的课程编写单元测试。这个类有一个公共方法,在公共方法内部有对同一个类的私有方法的调用。我想模拟对那些私有方法的调用。该类与此类似:

对于我的单元测试,我正在尝试将 PowerMock 与 Mockito 和 TestNG 一起使用。这是我在测试 somePublicMethod 的测试中的尝试:

当我运行这个测试时,我得到一个异常和一些提示:

我在网上查看了一些示例,但我没有找到一个专门使用 PowerMock 和 Mockito 和 TestNG 来做我想做的事。有人可以给我一些关于我可以做些什么不同的指示吗?

0 投票
1 回答
1692 浏览

java - 模拟 jdbc 数据源的困难

我想模拟一个 Datasource 和 InitialContext 以连接到容器外的数据库。这是我想使用模拟的逻辑:

这就是我进行的方式

问题:模拟不适用于 DataSource 它始终为空,但是 InitialContext 的模拟正在工作。

0 投票
1 回答
294679 浏览

java - PowerMockito 模拟单个静态方法并返回对象

我想从一个包含 2 个静态方法 m1 和 m2 的类中模拟一个静态方法 m1。我希望方法 m1 返回一个对象。

我尝试了以下

1)

这同时调用了具有不同返回类型的 m1 和 m2,因此它给出了返回类型不匹配错误。

2)PowerMockito.when(Static.m1(param1, param2)).thenReturn(1000l); 但是在执行 m1 时不会调用它。

3)PowerMockito.mockPartial(Static.class, "m1"); 给出 mockPartial 不可用的编译器错误,这是我从http://code.google.com/p/powermock/wiki/MockitoUsage 获得的。

0 投票
4 回答
2367 浏览

java - Java测试验证构造函数

我试图找出一种方法来通过以下方式验证类构造函数(请记住,这是一个理论示例)

我想验证构造函数调用 addItem 一次与 any(RoundItem.class) 并一次与 any(SquareItem.class)。我似乎找不到用 PowerMock 或 Mockito 以这种方式验证构造函数的好方法。有任何想法吗?

0 投票
4 回答
6373 浏览

java - 从子类外部访问父类的受保护方法(使用反射或任何可行的方法)

我四处寻找没有运气的解决方案,这就是我所拥有的以及我正在努力实现的目标

家长班

儿童班

我正在尝试调用MyChlidClass'setField方法,然后调用MyAbstractParentClass'protected String getPrivateParentField()后记;

但是上面的这段代码只返回MyChlidClass没有父类的声明方法protected,我怎么能访问受保护的方法?有任何想法吗?

非常感谢你:)

编辑 这是感兴趣的人的最终解决方案

PS:有一些例外你可以捕捉或添加它们的抛出声明;

再次感谢您的帮助

0 投票
2 回答
2537 浏览

java - 动态更改模拟对象返回值

假设我有以下方法:

现在我想传入一个SomeIteratorMock 对象,该对象将返回Boolean.TRUE以进入循环,但我也希望它Boolean.FALSE在某个时候返回(例如在 10 次之后),有没有办法通过 PowerMock/ 实现这一点易模?

在此先感谢您的帮助。

0 投票
1 回答
393 浏览

java - 包含 PowerMock 的生成代码测试

我最近遇到了一个障碍。我正在编写一些单元测试来锻炼我负责代码生成的库的某些部分。代码接受配置对象的输入,使用 CodeModel 编写代码,将这些类转储到 String,然后使用 Java 6 编译器 api 将它们即时编译成可用的类。

我遇到的障碍是我在生成的代码中测试的方法之一,它使用具有最终方法的类(Android Bundle)并在使用时抛出异常(“java.lang.RuntimeException:Stub!”)。因此,为了解决这个问题,我使用 PowerMock 来模拟最终方法。但是,在这种情况下,编译器 API 会引发 NPE。我认为这是因为 PowerMock 在幕后使用的设施,但我不确定。

这是一个例外:

内存文件管理器.java:

MemoryClassLoader.java(使用 MemoryFileManager):

一个非常基本的测试证明了这个问题: