[エラー][Spring Boot] インジェクトするBeanが複数存在する


MockitoのgetBeanName()にて、以下のような例外が発生した。

Caused by: java.lang.IllegalStateException:
Unable to register mock bean <Hoge> expected a single matching bean to replace but found [<Class1>, <Class2>]

該当クラスの設定を確認してみる。

HOGE.class
// インターフェース定義
public interface Hoge {
}
Class1.class
// 実装クラス1
@Service
public class Class1 implements Hoge {
}
Class2.class
// 実装クラス2
@Service
public class Class2 implements Hoge {
}

以下は利用側のテストクラス。

HogeSpec.class
// テストクラス
@SpringBootTest
public class HogeSpec extends Specification {
    @MockBean
    Hoge hoge;
}

同じHogeインターフェースを実装したClass1Class2が、共に@ServiceアノテーションによってDIコンテナに登録されてしまっている。
そのため、どちらのBeanをインジェクトすれば良いかが判断できずにエラーが発生する。
Class1Class2どちらかのクラスをコンポーネントスキャン対象から外す(@Service)必要がある。