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

テストしたいクラス

[cpp]

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

[/cpp]

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

[cpp]

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

[/cpp]

テストコード

[cpp]

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();
}
}
[/cpp]

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

テストしたいクラス

[cpp]

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

[/cpp]

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

[cpp]

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

[/cpp]

テストコード

[cpp]
@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();
}
}
[/cpp]