问题标签 [powermockito]

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 投票
1 回答
4204 浏览

java - 使用 PowerMockito 模拟通过反射创建的新实例

我有一个名为的类ConfigReferenceProcessor,它负责实例化给定类型的新对象并使用提供的配置信息配置它们。被实例化的对象的类型必须派生自一个名为的抽象基类BaseConfigurable(在这个基类中定义了一些方法,我需要调用这些方法来配置新实例)。向前的注释:BaseConfigurable我无法控制,因此我无法对其代码进行任何更改。

我正在尝试对方法进行单元测试,该方法processConfigReference执行以下操作:

在我的单元测试中,我需要控制该loadConfig方法,因为我不想通过文件系统查找等拖入整个配置行为。我的第一个想法是简单地创建自己的模拟对象:

不幸的是,我无法覆盖loadConfig,因为它final在基类中声明。

我发现了有关使用 PowerMockito 方法创建模拟对象的堆栈溢出的其他问题,whenNew并尝试使用该方法通过模拟 final 方法来设置我的模拟,并在创建新实例时返回模拟对象:

但是这种方法似乎对我不起作用。我怀疑它不起作用,因为我实际上并没有使用new.

有没有其他方法可以解决这个问题?

0 投票
0 回答
1213 浏览

powermock - PowerMock 可以模拟 final 类,PowerMockito 不能

我有最后一课需要模拟,所以我求助于 PowerMock。我发现 EasyMock 风格的语法不可读,所以我尝试使用 PowerMockito。

完全公开,我在 Spock 中这样做,这意味着我不能使用 PowerMock 跑步者,但我已经制定了规则,所以这个问题得到了解决。是的,我尝试过 Groovy 模拟,但它们无法处理 Java 最终类。

这是工作版本的草图:

这个版本,我从网上的例子中克隆出来的,炸弹:

我在运行时收到以下异常:

为此撕毁了我的头发。谢谢,如果你能帮忙!

更新:我在 JUnit 中试过这个,同样的问题。

0 投票
2 回答
2272 浏览

java - 让 PowerMockito 在接口上模拟静态方法?

我有一个库,我正在尝试模拟以进行测试...有一个 Java 8 接口,其静态方法实现如下:

我正在尝试模拟该返回值:

但是当我通过调试器运行测试时,不会返回模拟实例。

我已经尝试了静态模拟的许多不同排列,但我无法让静态方法返回我的模拟值。有什么想法吗?

0 投票
1 回答
1286 浏览

java - 如何使用 Mockito 验证重载方法的调用次数?

鉴于我的 MCVE 类,我如何检查是否使用 Mockito 调用 - 无需实际调用bar(Alpha, Baz)后者:bar(Xray, Baz)Foo

目前,我大致有以下 Mockito 增强的 JUnit 测试:

它失败了:

我想这是因为any(Class.class)匹配任何东西,并且不进行类型检查......所以,从 Mockito 的角度来看,我真的打bar()了两次电话:inFoo和 in FooTest(第 12 行)。

我必须做些什么才能使测试做我真正想要的:确保bar(Xray, Baz)在我调用时被调用bar(Alpha, baz)(同时拦截对 的调用bar(Xray, Baz))?

使用eq()Matcher ( when(stub.bar(eq(Xray.class), any(Baz.class))...) 会导致编译错误,Cannot resolve method 'bar(Class<Xray>, Baz)'- 但是,我可能不应该那样使用它(eq(xray)可能会更喜欢它)......

此外,在相关说明中,如果我尝试对 进行重载,则会bar(Alpha, Baz) private收到 的编译错误FooTest,说明:

错误:(10, 12) java: bar(Xray,Baz) 在 Foo 中具有私有访问权限

有没有办法使用 PowerMockito 来解决这个问题?如何?(显然,我只想计算调用bar(Xray, Baz)- 计算对所有重载的所有调用bar()是不可能的......)

只需在测试的第 10 行和第 14 行使用eq(xray)而不是使用any(Xray.class)就可以了 - 但我并不真正感兴趣的是什么(特定)Xray 对象作为参数传递给bar(),只要它是任何 Xray对象......

更新:我已经为讨论的“PowerMockito 和方法”部分发布了一个单独private的问题,并弄清楚了如何使这项工作适用于public方法;参看。我的评论如下

0 投票
2 回答
2368 浏览

reflection - mockito 如何使用方法名和反射进行验证

我有一个对象的间谍或模拟对象,我想验证一个方法是否被调用问题,我在执行时间而不是编译时间收到方法名

我想做类似的事情:

我已经使用了一种解决方法

问题在我使用 PowerMockito 之前它有效:对于标准方法它有效,但如果该方法是最终的,则该方法不存在mockingDetails.getInvocations() (但即使在mockingDetails.getInvocations() 实际verify(mock).getGuid()作品中没有以一种好的方式存在

所以如果你有任何想法/建议会很高兴

问候

0 投票
1 回答
3958 浏览

java - 尝试存根私有重载方法时,PowerMockito 抛出 NullPointerException

我(仍在)尝试检查是否使用 PowerMockitobar(Alpha, Baz)调用(原样) - 没有实际调用后者,因为我在下面的 MCVE 类。(我之前上过同一堂课,所有方法都在-以防你有似曾相识的感觉......)bar(Xray, Baz)bar(Xray, Baz)privateFooFoopublic

当我尝试运行下面的测试时,我从 PowerMock 获得了 NPE:

如果我制作存根 a PowerMockito.spy(foo),我会得到 a IllegalArgumentException: argument type mismatch at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:2014)。(它与 NPE 在同一条线上冒泡。)

我正在使用 Mockito-core 1.9.5、PowerMock 1.5.4(module-junit4 和 api-mockito)和 JUnit 4.11。

我需要改变什么来阻止异常被抛出?我怎样才能使这个测试工作?(除了测试我的课程是否有效,而不是如何...... ;-))

0 投票
1 回答
1179 浏览

java - 当返回类型不同时,PowerMockito 与重载方法不匹配

现在是系列的第 3 部分...

我(仍在)尝试检查是否使用 PowerMockito ( is )bar(Alpha, Baz)调用- 没有实际调用后者,因为我在下面的 MCVE 类。请注意,没有返回任何内容,而其他两个返回,并且我知道应该测试Foo 是否有效,而不是如何...bar(Xray, Baz)bar(Xray, Baz)privateFoobar(Alpha, Baz)String

当所有方法具有相同的返回类型时,用户 kswaughs解决了私有重载方法的问题。其他地方,建议将该when()方法与Method对象一起使用......但是,现在我已经定义bar(Alpha, Baz)使用与其他方法不同的返回类型,所有这些都再次分崩离析:

所有美丽的例外:

使用.withArguments(any(Xray.class), any(Baz.class))似乎没有什么不同。

在现场,不幸的是,异常并没有说明如何通过我的设置来实现第 1 点。有任何想法吗?

0 投票
2 回答
3281 浏览

mocking - 如何在 mockito 中模拟一个新对象

大家好,我目前正在编写 mockito 测试,我遇到了一些我无法模拟的东西,如下所示:

SEOKey seoKey = new SEOKey(seoEntityId, SEOEntityType.valueOf(seoEntityType));

0 投票
0 回答
94 浏览

java - 无法使用 PowerMockito 将数据模拟到方法中

我有一个代码,我正在编写 Juint 测试用例来检查服务 API。下面是代码:

我的 PackageServiceImpl 类包含 loadPackage 方法:

我正在尝试将 operatorId 模拟为 setter 方法:

但无法完成这项工作。请让我知道我在这里缺少什么来模拟 operatorId 到 setter 方法。

0 投票
0 回答
240 浏览

mockito - junit.framework.AssertionFailedError:发生异常:java.lang.ClassCastException:

出现错误 junit.framework.AssertionFailedError: 发生异常:java.lang.ClassCastException: us.ny.state.ij.safeact.ask.persistency.impl.CchResponsePersistenceImpl$$EnhancerByMockitoWithCGLIB$$d62edc51 不兼容

这是存根

私人合作伙伴PersistenceImpl 模拟合作伙伴PersistenceImpl;

在服务类中,我们将类型转换为不同的类以返回

PartnerPersistenceImpl parnerPeristenceImpl = (PartnerPersistenceImpl) PersistenceFactory.getService(RecordTypeEnum.SELLERPARTNER, entityManager);

我不知道为什么mockito不接受那个演员?