一部のメソッドに対していくつかのjUnitテストを行う必要があり、ソースコードを変更できません。ソースコードを変更せずに関数の動作を変更する可能性はありますか?簡単な例を見てください。クラスAとBはソースコードです(変更できません)。JUnitテストのtesting()を介してBで呼び出すときのrun()メソッドの動作をAから変更したい。何か案は?
public class A {
public String run(){
return "test";
}
}
public class B {
public void testing() {
String fromA = new A().run(); //I want a mocked result here
System.out.println(fromA);
}
}
public class C {
@Test
public void jUnitTest() {
new B().testing();
// And here i want to call testing method from B but with a "mock return" from run()
}
}
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@RunWith(PowerMockRunner.class)
@PrepareForTest(B.class)
public class C {
@Before
public void setUp() throws Exception {
A a = spy(new A());
when(a.run()).thenReturn("mock return");
PowerMockito.whenNew(A.class).withNoArguments().thenReturn(a);
}
@Test
public void jUnitTest() {
new B().testing();
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加