[C++] Whiteboxで内部オブジェクトをmockオブジェクトに置き換える

テストしたいクラス


public class MyClass 
{
    private InternalClass internalClass;
    void SomeMethod() 
    {
        internalClass.InternalMethod(); 
    }
}

MyClassの内部で作られるクラス


public class InternalClass 
{
    // MyClass#SomeMethod()の中で呼ばれるMock化したいメソッド
    public void InternalMethod() 
    {
        // do something
    }
}

テストコード


public class MyClassUTest 
{
    @Spy
    InternalClass mockInternalClass = new InternalClass();

    MyClass MyClass;

    @Before 
    void setUp() 
    {
        myClass = new MyClass();
        doNothing().when(internalClass).internalMethod(any());
        Whitebox.setInternalState(myClass, "internalClass", mockInternalClass);

    }

    @Test
    public void testMyClass()
    {
        myClass.SomeMethod();
    }
}

[C++] PowerMockで内部オブジェクトをmock化する

テストしたいクラス


public class SomeClass 
{
    private InternalClass internalClass;
    void SomeMethod() 
    {
        internalClass.InternalMethod(); 
    }
}

SomeClassの内部で作られるクラス


public class InternalClass 
{
    // SomeClass#SomeMethod()の中で呼ばれるMock化したいメソッド
    public void InternalMethod() 
    {
        // do something
    }
}

テストコード

@RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClass.class)
public class SomeClassUTest 
{
    @Mock
    InternalClass internalClass;

    @Before 
    void setUp() 
    {
        doNothing().when(internalClass).internalMethod(any());
        PowerMockito
           .whenNew(InternalClass.class)
           .withAnyArguments()
           .thenReturn(internalClass);
    }

    @Test
    public void testSomeClass()
    {
        someClass = new SomeClass();
        someClass.SomeMethod();
    }
}