问题标签 [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.
java - PowerMock:模拟静态方法(+在某些特定方法中返回原始值)
我使用 PowerMock 1.4.7 和 JUnit 4.8.2
我只需要模拟一些静态方法,我希望其他方法(来自同一个类)只是返回原始值。当我模拟mockStatic
并且不调用when().doReturn()
所有静态方法时,返回它们的默认值——比如返回 Object 时为 null 或返回 boolean 时为 false ......等等。所以我尝试
thenCallRealMethod
在每个静态方法上显式使用来返回默认实现(意味着没有模拟/没有假货),但我不知道如何在每个可能的参数变化上调用它(=我想要每个可能的输入调用原始方法)。我只知道如何模拟具体的论点变化。
java - 使用 PowerMock 模拟静态和动态方法
假设我们有
我想做的是在我的单元测试中模拟它。我需要模拟一个类的静态和动态方法Foo
。嘲笑getInstance()
就像
问题是,如何模拟bar
方法?
以前的技巧 withreplace(method(...)).with(method(...))
不起作用,因为它不是为动态方法设计的。
试图在已经模拟的类之上模拟也行不通:
上面的代码抛出AssertionError: Unexpected method call bar
.
那么我该怎么做呢?我不想将嘲笑.bar(...)
放入,因为在现实世界中,我需要一些静态方法getMockInstance
中不可用的数据。getMockInstance
java - 测试调用本机方法的代码
我有这样的课:
请注意getBar()是用 JNI 实现的,并且该类是final。我想编写一个 junit 测试来测试toString()方法。为此,我需要模拟getBar()方法,然后运行原始的toString()方法来检查输出。
我的第一个想法是这一定是不可能的,但后来我发现PowerMock支持根据功能列表测试最终类和本机方法。但到目前为止,我还没有成功。我管理的最好的事情是模拟整个类,但随后测试测试了模拟的toString()方法而不是真正的方法,这没有多大意义。
那么如何使用 PowerMock 从上面测试这个toString()方法呢?我更喜欢将 PowerMock 与Mockito一起使用,但如果这不可能,我可以使用EasyMock来代替。
java - 如何使用带有类的构造函数来模拟对象?
这是测试:
这些是类:
这是错误:
问题来了:我怎样才能让 PowerMock 找出要寻找的构造函数?
有问题的行是suppress
. 这就是错误的来源。
java - 需要一些基本的 PowerMock / EasyMock 问题的帮助
我对 PowerMock/EasyMock 的世界还比较陌生,我认为应该相对简单的东西就是行不通。也许有人可以告诉我哪里出错了。
考虑这两个类:
现在,在测试类中,我想测试 Bar 方法 doSomething。我遇到的问题是它对 Foo 的使用。如您所见,将 0 传递给 Foo 将导致除以零错误。我想存根/抑制 Foo.doStuff() 这样就不会发生这种情况。我真正需要做的就是确保确实调用了 doStuff()。所以,我这样做了:
当我运行它时,我得到了除以零异常。我曾认为使用 expect() 调用并指定返回值 1 会阻止该方法被执行。显然情况并非如此。所以第一个问题是,为什么不呢?
因此,我尝试执行上面注释掉的语句。也就是说,我注释掉了 expect() 调用,并使用了其他两个语句,认为我必须抑制该方法的执行。我发现如果我不执行suppress() 语句,我总是会得到除以零的异常。但是,通过在其中添加抑制语句,我得到一个断言错误,它说 doStuff 应该被调用 1 次,而实际调用是 0。
那么,为什么该方法不被视为已执行?
我如何让模拟的东西“存根”该方法,以便它被认为是被执行的并没有真正做任何事情?
我一直在处理的情况实际上对 doStuff 有一个无效的回报。对于处理没有返回值的方法,与那些有返回值的方法相比,必要的模拟语句有何不同?
似乎我正处于完成这项工作的风口浪尖,但我觉得我在这里尝试了某种不正确的陈述组合。我已经对此深有感触,阅读了一堆示例,但仍然不足。
有什么帮助吗?
谢谢,
克雷格
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 不能很好地处理这个问题,除非我误解了。
感谢您的任何想法!
java - 使用 Powermock 时出现 NoClassDefFoundError
我正在junit
使用测试运行器运行一个测试用例PowerMock
。我正在使用以下命令行来执行它:
这样做时,我收到此错误:
我该如何解决?
junit - PowerMock 测试 - 设置类的静态字段
我很难找到一种方法来设置类的静态字段。基本上是这样的:
其中 B 是另一个类。
除了 with 之外,还有什么方法可以在 PowerMock 中做到这一点setInternalStateFromContext()
?使用上下文类方法设置一个字段似乎有点矫枉过正。
谢谢。
java - 模拟静态方法
当我进行一些研究时,我发现 PowerMock 能够模拟静态 Java 方法。
有人可以(从技术上)解释 PowerMock 与 JUnit 和其他不能或不能做的不同之处吗?还有为什么静态方法在尝试模拟时会引起问题?
谢谢
java - EasyMock / PowerMock 导入问题
我遇到了一些我无法弄清楚的问题,如果使用 PowerMock 创建模拟,我发现一个站点建议存在与 verify() 不兼容的问题。
当我键入一行来创建模拟时,Eclipse 告诉我该方法不明确,我最终不得不将其指定为 EasyMock.createMock 或 PowerMock.createMock。
我最初刚开始使用 EasyMock,然后切换到 PowerMock。导入语句的顺序是否重要,如果您使用的是 PowerMock,不包含某些 EasyMock 内容是否重要?
这是我所拥有的:
那里可能有一些冗余。有可能发生冲突吗?为了消除歧义,顺序是否重要?
谢谢。
克雷格