0

私はプライベートメソッドをテストしようとしており、次の設定をしています:

パブリック クラス MyClass {
  private boolean myprivatemethod(ClassB classBObject, boolean b) {
    // ここで何かをする
    someOtherMethod();
  }

  プライベートボイド someOtherMethod() {
    // その他のもの
  }
}

final MyClass testsubject = PowerMockito.spy(new MyClass());
// "someOtherMethod" がモックされているため、スパイが必要です
// 簡単にするためにここには示していません
ClassB classBObject = mock(ClassB.class);

boolean result = Whitebox.invokeMethod(testsubject, "myprivatemethod", classBObject, true);

nullClassB オブジェクトとしてメソッドを実行しようとするまで、これはうまく機能します。

boolean result = Whitebox.invokeMethod(testsubject, "myprivatemethod", null, true);

これにより、次の例外が発生します。

java.lang.NullPointerException
    java.lang.Class.isAssignableFrom(ネイティブメソッド)で
    org.powermock.reflect.internal.WhiteboxImpl.checkIfParameterTypesAreSame (WhiteboxImpl.java:2432) で
    org.powermock.reflect.internal.WhiteboxImpl.getMethods (WhiteboxImpl.java:1934) で
    org.powermock.reflect.internal.WhiteboxImpl.getBestMethodCandidate (WhiteboxImpl.java:1025) で
    org.powermock.reflect.internal.WhiteboxImpl.findMethodOrThrowException (WhiteboxImpl.java:948) で
    org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod (WhiteboxImpl.java:882) で
    org.powermock.reflect.internal.WhiteboxImpl.invokeMethod (WhiteboxImpl.java:713) で
    org.powermock.reflect.Whitebox.invokeMethod (Whitebox.java:401) で
    test.myproject.TestMyClass.testMyClass(TestMyClass.java:10) で
    sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
    java.lang.reflect.Method.invoke(Method.java:597) で
    junit.framework.TestCase.runTest(TestCase.java:154) で
    junit.framework.TestCase.runBare (TestCase.java:127) で
    junit.framework.TestResult$1.protect(TestResult.java:106) で
    junit.framework.TestResult.runProtected (TestResult.java:124) で
    junit.framework.TestResult.run(TestResult.java:109) で
    junit.framework.TestCase.run(TestCase.java:118) で
    junit.framework.TestSuite.runTest(TestSuite.java:208) で
    junit.framework.TestSuite.run(TestSuite.java:203) で
    org.powermock.modules.junit3.internal.impl.PowerMockJUnit3RunnerDelegateImpl.run (PowerMockJUnit3RunnerDelegateImpl.java:113) で
    org.powermock.modules.junit3.internal.impl.JUnit3TestSuiteChunkerImpl.run (JUnit3TestSuiteChunkerImpl.java:165) で
    org.powermock.modules.junit3.PowerMockSuite.run (PowerMockSuite.java:51) で
    org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run (JUnit3TestReference.java:130) で
    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) で

Powermockito 1.5 を使用しています。nullパラメータとしてメソッドを実行する方法はありますか?

4

3 に答える 3

2

多分これを試してください:

Object[] params = {null, true};

それから :

Whitebox.invokeMethod(testsubject, "myprivatemethod", params);
于 2013-06-13T15:37:32.960 に答える
1

PowerMock はパラメーターの型を照合できません。次のようにパラメーターの型を明示的に伝えることができます-

ClassB classBObject = null;
boolean result = Whitebox.invokeMethod(testsubject,
        "myprivatemethod", new Class<?>[] { ClassB.class,Boolean.class},classBObject,true);
于 2014-04-29T06:36:55.687 に答える