タイトル通りです。
匿名クラスを使用したり、Mockitoを使用すると、抽象クラス内で注入されるべきクラスがnullになってしまいます。
また、抽象クラスを継承したテスト用のインナークラスを作成して@Autowired
しても実行時にエラーとなってしまいます。
テストしたいクラス
java
1@Service 2@RequiredArgsConstructor 3public abstract class Abstract { 4 5 @Autowired 6 protected JavaMailSender javaMailSender; 7 8 @Autowired 9 protected Configuration configuration; 10 11 // テストしたい具象メソッド 12 protected void method() { 13 // javaMailSenderやconfigurationを使った処理 14 // 省略 15 } 16 17}
試したこと 匿名クラス
java
1class AbstractTest { 2 3 @Test 4 public void test() { 5 Abstract target = new Abstract(){}; 6 // javaMailSenderやconfigurationがnullのままなのでNG 7 } 8 9}
試したこと Mockito
java
1class AbstractTest { 2 3 @Test 4 public void test() { 5 Abstract target = Mockito.mock(Abstract.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); 6 // javaMailSenderやconfigurationがnullのままなのでNG 7 } 8 9}
試したこと テスト用のインナークラス
java
1@SpringBootTest 2public abstract class AbstractTest { 3 4 @Autowired 5 private Concrete target; 6 7 @Test 8 public void test() { 9 // NoSuchBeanDefinitionExceptionでテストできず 10 // Concreteがインナークラスではなく通常の具象クラスであればテストできることは分かっています 11 } 12 13 @Service 14 static class Concrete extends Abstract { 15 } 16 17}
Abstractを継承した適当な具象クラスを作るしか方法はないのでしょうか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/10 00:19
2022/06/10 00:36 編集
2022/06/10 01:23