Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行JUnit测试时使用PowerMockito获取内部状态错误_Java_Junit_Powermock - Fatal编程技术网

Java 运行JUnit测试时使用PowerMockito获取内部状态错误

Java 运行JUnit测试时使用PowerMockito获取内部状态错误,java,junit,powermock,Java,Junit,Powermock,我正在尝试运行一个简单的JUnit测试 @RunWith(PowerMockRunner.class) @PrepareForTest(DB2Connection.class) public class SomeClassTest { AnotherReqClass reqClassObject = null; private SomeClass dao; private DB2Connection connection = null; private

我正在尝试运行一个简单的JUnit测试

@RunWith(PowerMockRunner.class)
@PrepareForTest(DB2Connection.class)

    public class SomeClassTest {

    AnotherReqClass reqClassObject = null;
    private SomeClass dao;
    private DB2Connection connection = null;
    private Connection con = null;

    @BeforeClass
    public static void beforeClass(){

    //Getting some information from a settings XML file         
    }

    @Before
    public void setUp() throws Exception {

        //Mock the Connection class that contains the static method
        con = mock(Connection.class);

            //PowerMock the class that 
        PowerMockito.mockStatic(DB2Connection.class);
        when(DB2Connection.getDb2Connection()).thenReturn(con);

             //some Logic goes here
    }

    @Test
    public void testMethod(){

        String someString ="xyz";
        requiredClassObject = new AnotherRequiredClass(dao);
        try {           
                     //Some Logic
            assertEquals(//Something);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }    
}
以下是堆栈跟踪:

org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator.
    at org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:643)
    at org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308)
    at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validateTestMethods(PowerMockJUnit4MethodValidator.java:79)
    at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validateInstanceMethods(PowerMockJUnit4MethodValidator.java:49)
    at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.<init>(PowerMockJUnit44RunnerDelegateImpl.java:70)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl.<init>(PowerMockJUnit47RunnerDelegateImpl.java:42)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit49RunnerDelegateImpl.<init>(PowerMockJUnit49RunnerDelegateImpl.java:25)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:143)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:39)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:217)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:59)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32)
    at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:33)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass

(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
org.powermock.reflect.exceptions.FieldNotFoundException:在类org.junit.internal.runners.MethodValidator中找不到字段“fTestClass”。
位于org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:643)
位于org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308)
位于org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validateTestMethods(PowerMockJUnit4MethodValidator.java:79)
位于org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validateInstanceMethods(PowerMockJUnit4MethodValidator.java:49)
位于org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.validate(powermockjunit44runnerdelegateinpl.java:108)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.(powermockjunit44runnerdelegateinpl.java:70)
位于org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl。(PowerMockJUnit47RunnerDelegateImpl.java:42)
位于org.powermock.modules.junit4.internal.impl.powermockjunit49runnerdelegateinpl.(powermockjunit49runnerdelegateinpl.java:25)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:143)
位于org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:39)
位于org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:217)
位于org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl。(JUnit4TestSuiteChunkerImpl.java:59)
位于org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner。(AbstractCommonPowerMockRunner.java:32)
位于org.powermock.modules.junit4.PowerMockRunner。(PowerMockRunner.java:33)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
位于org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass
(RunnerBuilder.java:59)
位于org.junit.internal.builders.AllDefaultPossibilityBuilder.runnerForClass(AllDefaultPossibilityBuilder.java:26)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
位于org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference。(JUnit4TestReference.java:33)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference。(JUnit4TestClassReference.java:25)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

当我尝试运行测试时,会得到错误org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:643)。如有任何建议,将不胜感激。谢谢。

这可以根据您的PowerMockito和JUnit版本来实现

尝试使用以下依赖项:

  • junit:4.11
  • powermock api mockito:1.5.6
  • powermock-module-junit4:1.5.6

根据您的PowerMockito和JUnit版本,可能会发生这种情况

尝试使用以下依赖项:

  • junit:4.11
  • powermock api mockito:1.5.6
  • powermock-module-junit4:1.5.6

这是一个在使用JUnit 4.12和PowerMock<1.6.1时出现的错误。这个问题在PowerMock 1.6.1中得到了解决。请相应地更新您的依赖项

testCompile 'junit:junit:4.12',
            'org.powermock:powermock-core:1.6.1',
            'org.powermock:powermock-module-junit4:1.6.1',
            'org.powermock:powermock-api-mockito:1.6.1'
如果不能升级PowerMock,那么可以使用JUnit4.11

testCompile 'junit:junit:4.11',
            'org.powermock:powermock-core:1.5.6',
            'org.powermock:powermock-module-junit4:1.5.6',
            'org.powermock:powermock-api-mockito:1.5.6'

请添加stacktrace的更多行,以揭示有关问题的更多细节。

这是一个在使用JUnit 4.12和PowerMock<1.6.1时出现的错误。这个问题在PowerMock 1.6.1中得到了解决。请相应地更新您的依赖项

testCompile 'junit:junit:4.12',
            'org.powermock:powermock-core:1.6.1',
            'org.powermock:powermock-module-junit4:1.6.1',
            'org.powermock:powermock-api-mockito:1.6.1'
如果不能升级PowerMock,那么可以使用JUnit4.11

testCompile 'junit:junit:4.11',
            'org.powermock:powermock-core:1.5.6',
            'org.powermock:powermock-module-junit4:1.5.6',
            'org.powermock:powermock-api-mockito:1.5.6'

能否请您添加stacktrace的更多行,以揭示有关该问题的更多详细信息。

能否发布完整的堆栈跟踪?需要知道哪一行抛出error@afrin216我已经添加了堆栈跟踪。它没有引用我的任何代码类。可能是重复的。你能发布完整的堆栈跟踪吗?需要知道哪一行抛出error@afrin216我已经添加了堆栈跟踪。它没有引用我的任何代码类。可能与我为4.12添加的1.6.1重复,但仍然是相同的错误。我在上面发布了整个堆栈跟踪。堆栈跟踪看起来不像是在使用1.6.1。线