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