前提・実現したいこと
JUnit5で、メソッド内でnewしているクラスのモックを作りたいです。
開発段階なのでテスト対象のコードを変えることはできますが、getMain()メソッドで受け取った引数を使ってnewする必要があるため、メソッドから出せません。
発生している問題・エラーメッセージ
調べてみると、PowerMockito を使えば実現できそうというのはわかったのですが、うまくいかずに元のコードが動いています。
該当のソースコード
Java
1/* テスト対象 */ 2public class MainService { 3 public int getMain(int base, int add) { 4 SubService subService = new SubService(base); // コンストラクタも呼びたくない 5 return subService.getSub(add); 6 } 7}
Java
1/* モック対象 */ 2public class SubService { 3 private int base; 4 5 public SubService(int base) { 6 this.base = base; 7 } 8 9 public int getSub(int add) { 10 return this.base + add; 11 } 12}
Java
1/* テストコード */ 2import org.junit.jupiter.api.Assertions; 3import org.junit.jupiter.api.Test; 4import org.junit.jupiter.api.extension.ExtendWith; 5import org.mockito.InjectMocks; 6import org.mockito.Mock; 7import org.mockito.junit.jupiter.MockitoExtension; 8import org.powermock.api.mockito.PowerMockito; 9import org.powermock.core.classloader.annotations.PrepareForTest; 10 11@ExtendWith(MockitoExtension.class) 12@PrepareForTest({MainService.class, SubService.class}) 13class MainServiceTest { 14 @Mock 15 private SubService subService; 16 17 @InjectMocks 18 private MainService mainService; 19 20 @Test 21 public void testGetSum() throws Exception { 22 PowerMockito.when(subService.getSub(3)).thenReturn(6); 23 PowerMockito.when(subService.getSub(2)).thenReturn(5); 24 PowerMockito.whenNew(SubService.class).withAnyArguments().thenReturn(subService); 25 Assertions.assertEquals(6, subService.getSub(3)); // ここはパスする 26 Assertions.assertEquals(5, mainService.getMain(1, 2)); // ここは不一致(3になる) 27 } 28}
試したこと
メソッド内でnewしている場合には @PrepareForTest がいるような情報もあったので、付けてみました。
補足情報(FW/ツールのバージョンなど)
実行は、Eclipse(2021-06)から行っています。
テスト関係の追加ライブラリは、以下です(手動でjarを置いています)。
- byte-buddy-1.9.9.jar
- byte-buddy-agent-1.9.9.jar
- mockito-core-3.12.4.jar
- mockito-junit-jupiter-3.9.0.jar
- objenesis-3.2.jar
- powermock-api-mockito2-2.0.9.jar
- powermock-api-support-2.0.9.jar
- powermock-core-2.0.9.jar
- powermock-module-javaagent-2.0.9.jar
- powermock-reflect-2.0.9.jar
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。