问题标签 [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 投票
1 回答
2286 浏览

java - Power Mock - 模拟最终类时出现断言错误

我试图使用 Power Mock 模拟某些场景。

我在以下测试方法上收到断言错误 - returnSevenTest()

待测类

最后一堂课

使用 Power Mock+ Easy Mock 测试表演类

}

收到错误:

java.lang.AssertionError: Expectation failure on verify: tutorial.one.TutorialOne(tutorial.one.DependentFinalClass$$EnhancerByCGLIB$$fa2e41a0@5a9de6): expected: 1, actual: 0 at org.powermock.api.easymock.internal.invocationcontrol.NewInvocationControlAssertionError.throwAssertionErrorForNewSubstitutionFailure(NewInvocationControlAssertionError.java:20) at org.powermock.api.easymock.PowerMock.verifyClass(PowerMock.java:2279) at org.powermock.api.easymock.PowerMock.verify(PowerMock.java:1646) at org.powermock.api.easymock.PowerMock.verifyAll(PowerMock.java:1586) at tutorial.one.TutorialOneTests.returnSevenTest(TutorialOneTests.java:174) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source)

任何帮助都非常感谢!谢谢

0 投票
1 回答
2719 浏览

java - 让 Mockito 和 Powermock 正确抛出错误

我有以下代码

第一个测试通过正常,第二个测试失败,测试错误为

失败,预期:<[Test Exception]> 但是:<[ Missing method call for verify(mock) here:-> at org.powermock.api.mockito.internal.invocationcontrol.MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65)正确验证示例: verify(mock).doSomething() 此外,此错误可能会出现,因为您验证了以下任一方法:final/private/equals()/hashCode() 方法。这些方法不能被存根/验证。]>

有想法该怎么解决这个吗?尝试了我能想到的一切。

谢谢

保罗

0 投票
1 回答
9320 浏览

java - 使用 Powermock 模拟类的构造函数时出现 ExceptionInInitializerError。如何解决?

这是我的情况。我有一个 AbstractController 类。它有一个子类Controller。在 AbstractController 的一种方法中,实例化了一个新的 ApplicationLock。在为 Controller 编写 ut 时,我想模拟 ApplicationLock。我写了一个如下所示的测试用例。

我已经向测试类添加了必要的注释。

@RunWith(PowerMockRunner.class)

@PrepareForTest({AbstractController.class})

但是在运行此测试用例时出现以下错误。这是 AbstractController 中的静态初始化程序。

引起:com.acompany.controller.common.AbstractController.(AbstractController.java:65) 处的 java.lang.NullPointerException

完整的堆栈跟踪如下。

java.lang.ExceptionInInitializerError 在 java.lang.Class.forName0(Native Method) 在 java.lang.Class.forName(Class.java:169) 在 javassist.runtime.Desc.getClassObject(Desc.java:44) 在 javassist。 runtime.Desc.getClassType(Desc.java:153) 在 javassist.runtime.Desc.getType(Desc.java:123) 在 javassist.runtime.Desc.getType(Desc.java:79) 在 com.acompany.controller.portfolio .ControllerTest.testIncrementalFail(ControllerTest.java:195) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java :25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66) 在 org.powermock。modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:307) at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86) at org.junit.internal.runners.MethodRoadie .runBeforesThenTestThenAfters(MethodRoadie.java:94) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMethodRunner .executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:73) 在 org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84) 的 org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84) .internal.runners.MethodRoadie.run(MethodRoadie.java:49) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207) 在 org.powermock.modules.junit4.internal.impl .PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120) at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.爪哇:34) 在 org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118) 在 org.powermock.modules .junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102) at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) at org.eclipse.jdt .internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit .runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)引起:com.acompany.controller.common.AbstractController.(AbstractController.java:65) 处的 java.lang.NullPointerException ... 35 更多

0 投票
1 回答
1937 浏览

java - 如何重置 PowerMockito.whenNew() 行为?

这就是我正在做的事情:

我找不到PowerMockito.reset()方法.. 什么是解决方法?

0 投票
1 回答
2016 浏览

java - 如何使用 PowerMock(ito) 获取对传递给 Thread 构造函数的 Runnable 实例的引用?

有一个黑盒类,它Thread使用它的构造函数创建一个接受一个实例Runnable作为参数的:

我想拦截构造函数调用并获取对传递Taskimplementation的引用Runnable。这是到目前为止的代码:

测试执行将打印出:

有没有办法获取对构造函数返回的所有Runnable对象或Thread对象的引用?我想在当前(主)线程中执行异步代码,或者加入创建的线程并执行断言。

0 投票
6 回答
178666 浏览

java - 如何模拟使用 PowerMock 进行测试的私有方法?

我有一个类,我想用一个调用私有的公共方法来测试它。我想假设私有方法可以正常工作。例如,我想要类似doReturn....when.... 我发现使用 PowerMock 有可能的解决方案,但这个解决方案对我不起作用。怎么做?有人遇到过这个问题吗?

0 投票
3 回答
2227 浏览

android - 带有 ClassNotFoundException 的 Android + Powermock + Mockito + Maven 构建错误

我在使用 maven 的 powermock 和 mockito 时遇到了一个奇怪的构建问题。我可以用 ecplise 完美地运行测试(不使用 maven)。但是当我尝试从 cli 或在构建服务器上使用 maven 运行测试时,我得到以下异常:

错误测试:测试机制:java.lang.ClassNotFoundException:org.mockito.internal.progres s.ThreadSafeMockingProgress

我的单元测试如下所示:

我的 pom.xml 看起来像这样:

从 CLI 构建时,我收到以下错误:

任何人都知道为什么我会收到此错误?非常感谢您的帮助...

0 投票
5 回答
67303 浏览

java - 使用 PowerMock 模拟私有方法,但仍会调用底层方法

我正在尝试模拟一个进行 JNDI 调用的私有方法。当从单元测试中调用该方法时,它会引发异常^。我想模拟该方法以进行测试。我使用了另一个问题答案中的示例代码,虽然测试通过了,但似乎仍然调用了底层方法。System.err.println()我在方法中插入了一个doTheGamble(),它被打印到我的控制台上。

有趣的是,如果我注释掉第一个assertThat,测试通过。?:(

那么,我如何模拟一个私有方法以便它不会被调用?

^ 可以理解,因为我的工作区不支持 JNDI,所以只有生产环境支持

% 我正在使用所有库的最新版本,JUnit 4.10、Mockito 1.8.5、Hamcrest 1.1、Javassist 3.15.0 和 PowerMock 1.4.10。

0 投票
3 回答
1559 浏览

java - Mockito 间谍返回的结果与实际方法调用不同

我有以下代码:

我正在为此方法编写单元测试。当我运行该方法而不模拟VTDGenparseFile方法时返回true。但是,当我用间谍模拟它时,它会返回false.

我的测试如下:

我的印象是 Mockito 的间谍对象不应该改变包装对象的行为,那么为什么我得到的是假而不是真的?

0 投票
3 回答
7848 浏览

java - 使用 powermock 抑制 Java 中的单例构造函数

我正在尝试对一些使用 Singleton 类的类进行单元测试,该类的构造函数做了一些我在单元测试环境中不能(也不应该)做的事情。我的理想方案是最终完全抑制构造函数,然后将我的测试类调用的其他成员方法排除在外。我的问题是我似乎无法抑制构造函数。

我对解决此问题的方法的理解如下:

不幸的是,在 createMock 调用期间,MySingleton 构造函数被命中,它仍然调用超级构造函数。

我在做傻事吗?我在网上找到了一个几乎完全一样的例子,但它使用了不推荐使用的 suppressConstructor 方法。尽管被弃用,我也尝试过,但无济于事......

我正在尝试做的事情可能吗?如果是这样,我做错了什么?

*编辑版本现在可以使用。