【问题标题】:TestNG + Mockito + PowerMock Always show "ClassNotPreparedException"TestNG + Mockito + PowerMock 总是显示“ClassNotPreparedException”
【发布时间】:2018-04-03 07:00:50
【问题描述】:

我使用 Testng & Mockito & Powermock(不使用 Junit 3 或 4)来测试我的类 JeebiesKwCheckUtil 其中包含静态和最终,我已经将代码和 pom 作为 Powermock 介绍,但它仍然不起作用无论如何,总是显示org.powermock.api.mockito.ClassNotPreparedException,它让我发疯了......

代码:
我把它写成 Powermock&mockito Intro。 Link在这里;

@PrepareForTest(JeebiesKwCheckUtil.class)
public class JeebiesKwCheckUtilTest {
   @Test
   public void testMethodA() {
       PowerMockito.mockStatic(JeebiesKwCheckUtil.class); // Exception here
       // MethodA use stticMethodB
       Mockito.when(JeebiesKwCheckUtil.staticMethodB).thenReturn(Result);
       Assert.assertEquals(JeebiesKwCheckUtil.MethodA......)
   }
}

Pom 文件: 这里有 4 个 Maven Jar,Powermock 的版本是 1.7.1


<properties>
    <powermock.version>1.7.1</powermock.version>
</properties>
<dependencies>
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-testng</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito2</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.13.1</version>
        <scope>test</scope>
    </dependency> 
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.8.9</version>
        <scope>test</scope>
    </dependency>
</dependencies>

错误:

org.powermock.api.mockito.ClassNotPreparedException: 
[Ljava.lang.Object;@29df4d43
The class com.yidian.serving.util.JeebiesKwCheckUtil not prepared for test.
at org.powermock.api.mockito.expectation.reporter.MockitoPowerMockReporter.classNotPrepared(MockitoPowerMockReporter.java:32)
at org.powermock.api.mockito.internal.mockcreation.MockTypeValidatorFactory$DefaultMockTypeValidator.validate(MockTypeValidatorFactory.java:38)
at org.powermock.api.mockito.internal.mockcreation.AbstractMockCreator.validateType(AbstractMockCreator.java:10)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMock(DefaultMockCreator.java:56)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.mock(DefaultMockCreator.java:46)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:73)
at com.yidian.serving.util.JeebiesKwCheckUtilTest.testCheckSensitiveWord(JeebiesKwCheckUtilTest.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:571)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:707)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:979)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1187)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1116)
at org.testng.TestNG.runSuites(TestNG.java:1028)
at org.testng.TestNG.run(TestNG.java:996)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

谁能给我一个解决方案或建议?非常感谢~

【问题讨论】:

标签: java mockito testng powermock powermockito


【解决方案1】:

我在朋友的帮助下完成了,

扩展 PowerMockTestCase 以注入一个“Runner”,就像 Junit(PowerMockRunner...)

@PrepareForTest(JeebiesKwCheckUtil.class)
public class JeebiesKwCheckUtilTest extends PowerMockTestCase{...}

附言。如果您和我一样遇到“SSL”问题,请在课前添加@..Ignore

@PowerMockIgnore("javax.net.ssl.*")

这个问题真的和TestNG + Mockito + PowerMock - verifyStatic() does not work一样,但是我也遇到了SSL问题,搞砸了一切......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多