问题标签 [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 回答
32537 浏览

java - PowerMock:模拟静态方法(+在某些特定方法中返回原始值)

我使用 PowerMock 1.4.7 和 JUnit 4.8.2

我只需要模拟一些静态方法,我希望其他方法(来自同一个类)只是返回原始值。当我模拟mockStatic并且不调用when().doReturn()所有静态方法时,返回它们的默认值——比如返回 Object 时为 null 或返回 boolean 时为 false ......等等。所以我尝试 thenCallRealMethod在每个静态方法上显式使用来返回默认实现(意味着没有模拟/没有假货),但我不知道如何在每个可能的参数变化上调用它(=我想要每个可能的输入调用原始方法)。我只知道如何模拟具体的论点变化。

0 投票
1 回答
7564 浏览

java - 使用 PowerMock 模拟静态和动态方法

假设我们有

我想做的是在我的单元测试中模拟它。我需要模拟一个类的静态和动态方法Foo。嘲笑getInstance()就像

问题是,如何模拟bar方法?

以前的技巧 withreplace(method(...)).with(method(...))不起作用,因为它不是为动态方法设计的。

试图在已经模拟的类之上模拟也行不通:

上面的代码抛出AssertionError: Unexpected method call bar.

那么我该怎么做呢?我不想将嘲笑.bar(...)放入,因为在现实世界中,我需要一些静态方法getMockInstance中不可用的数据。getMockInstance

0 投票
3 回答
8131 浏览

java - 测试调用本机方法的代码

我有这样的课:

请注意getBar()是用 JNI 实现的,并且该类是final。我想编写一个 junit 测试来测试toString()方法。为此,我需要模拟getBar()方法,然后运行原始的toString()方法来检查输出。

我的第一个想法是这一定是不可能的,但后来我发现PowerMock支持根据功能列表测试最终类和本机方法。但到目前为止,我还没有成功。我管理的最好的事情是模拟整个类,但随后测试测试了模拟的toString()方法而不是真正的方法,这没有多大意义。

那么如何使用 PowerMock 从上面测试这个toString()方法呢?我更喜欢将 PowerMock 与Mockito一起使用,但如果这不可能,我可以使用EasyMock来代替。

0 投票
2 回答
19408 浏览

java - 如何使用带有类的构造函数来模拟对象?

这是测试:

这些是类:

这是错误:

问题来了:我怎样才能让 PowerMock 找出要寻找的构造函数?

有问题的行suppress. 这就是错误的来源。

0 投票
1 回答
4229 浏览

java - 需要一些基本的 PowerMock / EasyMock 问题的帮助

我对 PowerMock/EasyMock 的世界还比较陌生,我认为应该相对简单的东西就是行不通。也许有人可以告诉我哪里出错了。

考虑这两个类:

现在,在测试类中,我想测试 Bar 方法 doSomething。我遇到的问题是它对 Foo 的使用。如您所见,将 0 传递给 Foo 将导致除以零错误。我想存根/抑制 Foo.doStuff() 这样就不会发生这种情况。我真正需要做的就是确保确实调用了 doStuff()。所以,我这样做了:

当我运行它时,我得到了除以零异常。我曾认为使用 expect() 调用并指定返回值 1 会阻止该方法被执行。显然情况并非如此。所以第一个问题是,为什么不呢?

因此,我尝试执行上面注释掉的语句。也就是说,我注释掉了 expect() 调用,并使用了其他两个语句,认为我必须抑制该方法的执行。我发现如果我不执行suppress() 语句,我总是会得到除以零的异常。但是,通过在其中添加抑制语句,我得到一个断言错误,它说 doStuff 应该被调用 1 次,而实际调用是 0。

那么,为什么该方法不被视为已执行?

我如何让模拟的东西“存根”该方法,以便它被认为是被执行的并没有真正做任何事情?

我一直在处理的情况实际上对 doStuff 有一个无效的回报。对于处理没有返回值的方法,与那些有返回值的方法相比,必要的模拟语句有何不同?

似乎我正处于完成这项工作的风口浪尖,但我觉得我在这里尝试了某种不正确的陈述组合。我已经对此深有感触,阅读了一堆示例,但仍然不足。

有什么帮助吗?

谢谢,

克雷格

0 投票
2 回答
23079 浏览

java - PowerMock、mockito、验证静态方法

我正在尝试让 PowerMock 与 mockito 一起使用,并且我正在关注此处的文档:http ://code.google.com/p/powermock/wiki/MockitoUsage13 。

为了简化一点,假设我有一个静态方法:

而要测试的类是这样的:

在我的单元测试中,我想验证 StaticObj.put 在 K 和 X 不为空白或 null 时是否被调用,所以我执行以下操作:

这行得通,这是我所期望的。什么不起作用,如果我注释掉 K 的验证,那么 X 的验证就会失败!错误消息表明 ("x1", "x") 是预期的,但得到了 ("k1", "k")。为什么是这样?我没有正确编码吗?

这也让我相信,通过的以下类型的测试可能完全因为错误的原因而通过:

例如,我想知道 powermock 是否看到“k1”,决定从未调用过“x1”,然后通过。(?)

一般来说,我有一个称为 N 次的静态方法(其中 N 根据输入参数而变化)。我想验证它是否在正确的情况下被调用(可以由输入参数确定)。似乎 powermock 不能很好地处理这个问题,除非我误解了。

感谢您的任何想法!

0 投票
5 回答
45106 浏览

java - 使用 Powermock 时出现 NoClassDefFoundError

我正在junit使用测试运行器运行一个测试用例PowerMock。我正在使用以下命令行来执行它:

这样做时,我收到此错误:

我该如何解决?

0 投票
6 回答
78879 浏览

junit - PowerMock 测试 - 设置类的静态字段

我很难找到一种方法来设置类的静态字段。基本上是这样的:

其中 B 是另一个类。

除了 with 之外,还有什么方法可以在 PowerMock 中做到这一点setInternalStateFromContext()?使用上下文类方法设置一个字段似乎有点矫枉过正。

谢谢。

0 投票
1 回答
7009 浏览

java - 模拟静态方法

当我进行一些研究时,我发现 PowerMock 能够模拟静态 Java 方法。

有人可以(从技术上)解释 PowerMock 与 JUnit 和其他不能或不能做的不同之处吗?还有为什么静态方法在尝试模拟时会引起问题?

谢谢

0 投票
1 回答
15823 浏览

java - EasyMock / PowerMock 导入问题

我遇到了一些我无法弄清楚的问题,如果使用 PowerMock 创建模拟,我发现一个站点建议存在与 verify() 不兼容的问题。

当我键入一行来创建模拟时,Eclipse 告诉我该方法不明确,我最终不得不将其指定为 EasyMock.createMock 或 PowerMock.createMock。

我最初刚开始使用 EasyMock,然后切换到 PowerMock。导入语句的顺序是否重要,如果您使用的是 PowerMock,不包含某些 EasyMock 内容是否重要?

这是我所拥有的:

那里可能有一些冗余。有可能发生冲突吗?为了消除歧义,顺序是否重要?

谢谢。

克雷格