6

説明:

テスト中のクラスでスタブまたはモックを有効にできないようです。whenNew アクションを使用しようとしているので、戻りオブジェクトをモックしてから、戻り値でそのオブジェクトの操作をモックできます。

欠けているが見えない単純なものだと思います。

解決策: もともと私は で実行しMockitoRunner.classていましたが、 に変更する必要がありましたPowerMockRunner.class。以下のコードは、ソリューションを反映しています。

クラスパス上の jar:

  • powermock-mockito-1.4.11-full.jar
  • mockoito-all-1.9.0.jar
  • javassist-3.15.0-GA.jar
  • junit-4.8.2.jaf
  • オブジェクト-1.2.jar
  • cglib-nodep-2.2.2.jar

テストクラス

   import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.powermock.api.mockito.PowerMockito;
    import static org.powermock.api.mockito.PowerMockito.*;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    import static org.mockito.Matchers.any;
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(ClassA.class)
    public class ClassATest {

        @Test
        public void test() throws Exception
        {
                String[] returnSomeValue = {"PowerMockTest"};
                String[] inputValue = {"Test1"};
                ClassB mockedClassB = mock(ClassB.class);
                whenNew( ClassB.class).withNoArguments().thenReturn( mockedClassB );
                when( mockedClassB, "getResult", any(String[].class) ).thenReturn(returnSomeValue);       

                IClassA classUnderTest = new ClassA();
                String[] expectedValue = classUnderTest.runTest(inputValue);      
        }

    }

クラス A の実装

public class ClassA implements IClassA {

    @Override
    public String[] runTest(String[] inputValues) {

        String[] result;
        IClassB classB = new ClassB();
        result = classB.getResult(inputValues);

        return result;
    }

} 
4

1 に答える 1

10

パワーモック機能 ( など) を使用し@PrepareForTestPowerMockito.whenNewいるため、PowerMockRunner でテストを実行する必要があります。

@RunWith(PowerMockRunner.class)

ClassB#geResult はプライベートではないため、コードを単純化して置き換えることもできます

when( mockedClassB, "getResult", any(String[].class) ).thenReturn(someValue); 

when(mockedClassB.getResult(any(String[].class))).thenReturn(someValue);
于 2012-08-14T19:48:00.023 に答える