1

ClassToTestクラスのメソッドをテストしたいと思いmethodToTestます。しかし、anotherMethodによって呼び出されているプラ​​イベートメソッドには、パブリックメソッドを使用しmethodToTestてシングルトンクラスによって返される値との依存関係があるため、これを作成することはできません。SingletonClassgetName

powermockのprivateMethodモックとstaticメソッドmockを使ってみましたが、役に立ちませんでした。
誰かがこのシナリオの解決策を持っていますか?

Class ClassToTest{
    public void methodToTest(){
        ...
        anotherMethod();
        ...
    }

    private void anotherMethod(){
        SingletonClass singletonObj = SingletonClass.getInstance();
        String name = singletonObj.getName();
        ...
    }
}
4

2 に答える 2

0

この状況に対処するには、部分モックを使用できるはずです。オブジェクトのインスタンスを作成したいように聞こえますが、オブジェクトが anotherMethod() メソッドを呼び出しているかどうかを確認したいだけで、他のメソッドのロジックを実際には何も実行していません。私が正しく理解していれば、以下はあなたの目標を達成するはずです。

@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToTest.class})
public class ClassToTestTest {
    @Test
    public void testMethodToTest() {
        ClassToTest mockInstance = 
                   PowerMock.createPartialMock(SingletonClass.class,"anotherMethod");
        PowerMock.expectPrivate(mockInstance, "anotherMethod");
        PowerMock.replay(mockInstance);
        mockInstance.methodToTest();
        PowerMock.verify(mockInstance);
    }
}
于 2013-04-16T16:29:17.507 に答える
0

Use mockStatic (see http://code.google.com/p/powermock/wiki/MockitoUsage13#Mocking_Static_Method)

@RunWith(PowerMockRunner.class)
@PrepareForTest({SingletonClass.class})
public class ClassToTestTest {
    @Test
    public void testMethodToTest() {
        SingletonClass mockInstance = PowerMockito.mock(SingletonClass.class);
        PowerMockito.mockStatic(SingletonClass.class);
        PowerMockito.when(SingletonClass.getInstance()).thenReturn(mockInstance);
        PowerMockito.when(mockInstance.getName()).thenReturn("MOCK NAME");

        //...
    }
}
于 2013-01-25T18:12:27.203 に答える