问题标签 [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.
java - 使用 PowerMockito 模拟通过反射创建的新实例
我有一个名为的类ConfigReferenceProcessor
,它负责实例化给定类型的新对象并使用提供的配置信息配置它们。被实例化的对象的类型必须派生自一个名为的抽象基类BaseConfigurable
(在这个基类中定义了一些方法,我需要调用这些方法来配置新实例)。向前的注释:BaseConfigurable
我无法控制,因此我无法对其代码进行任何更改。
我正在尝试对方法进行单元测试,该方法processConfigReference
执行以下操作:
在我的单元测试中,我需要控制该loadConfig
方法,因为我不想通过文件系统查找等拖入整个配置行为。我的第一个想法是简单地创建自己的模拟对象:
不幸的是,我无法覆盖loadConfig
,因为它final
在基类中声明。
我发现了有关使用 PowerMockito 方法创建模拟对象的堆栈溢出的其他问题,whenNew
并尝试使用该方法通过模拟 final 方法来设置我的模拟,并在创建新实例时返回模拟对象:
但是这种方法似乎对我不起作用。我怀疑它不起作用,因为我实际上并没有使用new
.
有没有其他方法可以解决这个问题?
powermock - PowerMock 可以模拟 final 类,PowerMockito 不能
我有最后一课需要模拟,所以我求助于 PowerMock。我发现 EasyMock 风格的语法不可读,所以我尝试使用 PowerMockito。
完全公开,我在 Spock 中这样做,这意味着我不能使用 PowerMock 跑步者,但我已经制定了规则,所以这个问题得到了解决。是的,我尝试过 Groovy 模拟,但它们无法处理 Java 最终类。
这是工作版本的草图:
这个版本,我从网上的例子中克隆出来的,炸弹:
我在运行时收到以下异常:
为此撕毁了我的头发。谢谢,如果你能帮忙!
更新:我在 JUnit 中试过这个,同样的问题。
java - 让 PowerMockito 在接口上模拟静态方法?
我有一个库,我正在尝试模拟以进行测试...有一个 Java 8 接口,其静态方法实现如下:
我正在尝试模拟该返回值:
但是当我通过调试器运行测试时,不会返回模拟实例。
我已经尝试了静态模拟的许多不同排列,但我无法让静态方法返回我的模拟值。有什么想法吗?
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
方法;参看。我的评论如下。
reflection - mockito 如何使用方法名和反射进行验证
我有一个对象的间谍或模拟对象,我想验证一个方法是否被调用问题,我在执行时间而不是编译时间收到方法名
我想做类似的事情:
我已经使用了一种解决方法
问题在我使用 PowerMockito 之前它有效:对于标准方法它有效,但如果该方法是最终的,则该方法不存在mockingDetails.getInvocations()
(但即使在mockingDetails.getInvocations()
实际verify(mock).getGuid()
作品中没有以一种好的方式存在
所以如果你有任何想法/建议会很高兴
问候
java - 尝试存根私有重载方法时,PowerMockito 抛出 NullPointerException
我(仍在)尝试检查是否使用 PowerMockitobar(Alpha, Baz)
调用(原样) - 没有实际调用后者,因为我在下面的 MCVE 类。(我之前上过同一堂课,所有方法都在-以防你有似曾相识的感觉......)bar(Xray, Baz)
bar(Xray, Baz)
private
Foo
Foo
public
当我尝试运行下面的测试时,我从 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。
java - 当返回类型不同时,PowerMockito 与重载方法不匹配
现在是系列的第 3 部分...
我(仍在)尝试检查是否使用 PowerMockito ( is )bar(Alpha, Baz)
调用- 没有实际调用后者,因为我在下面的 MCVE 类。请注意,没有返回任何内容,而其他两个返回,并且我知道我应该测试Foo 是否有效,而不是如何...bar(Xray, Baz)
bar(Xray, Baz)
private
Foo
bar(Alpha, Baz)
String
当所有方法具有相同的返回类型时,用户 kswaughs解决了私有重载方法的问题。在其他地方,建议将该when()
方法与Method
对象一起使用......但是,现在我已经定义bar(Alpha, Baz)
使用与其他方法不同的返回类型,所有这些都再次分崩离析:
所有美丽的例外:
使用.withArguments(any(Xray.class), any(Baz.class))
似乎没有什么不同。
在现场,不幸的是,异常并没有说明如何通过我的设置来实现第 1 点。有任何想法吗?
mocking - 如何在 mockito 中模拟一个新对象
大家好,我目前正在编写 mockito 测试,我遇到了一些我无法模拟的东西,如下所示:
SEOKey seoKey = new SEOKey(seoEntityId, SEOEntityType.valueOf(seoEntityType));
java - 无法使用 PowerMockito 将数据模拟到方法中
我有一个代码,我正在编写 Juint 测试用例来检查服务 API。下面是代码:
我的 PackageServiceImpl 类包含 loadPackage 方法:
我正在尝试将 operatorId 模拟为 setter 方法:
但无法完成这项工作。请让我知道我在这里缺少什么来模拟 operatorId 到 setter 方法。
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不接受那个演员?