springockito-annotations 1.0.9
統合テストに使用しています。
私は次のコントローラーを持っています:
@Autowired
public Controller(
@Qualifier("passwordService ") PasswordService passwordService ,
@Qualifier("validator") Validator validator,
@Qualifier("reportService") ReportService reportService,
DateCalculator dateCalculator,
Accessor accessor){
this.passwordService = passwordService;
this.validator = validator;
this.reportService = reportService;
this.dateCalculator = dateCalculator;
this.accessor = accessor;
}
テストでは、@ReplaceWithMockアノテーションを使用してコンテキストから Bean を置き換えます。
しかし、残念ながら@Qualifierアノテーションのない依存関係に対してのみ機能します。
つまり、私のテストは次のようになります。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class, classes = {TestContext.class})
public class ControllerTest {
@Autowired
@ReplaceWithMock
private PasswordService passwordService ;
@Autowired
@ReplaceWithMock
private Validator validator;
@Autowired
@ReplaceWithMock
private ReportService reportService;
@Autowired
@ReplaceWithMock
private DateCalculator dateCalculator;
@Autowired
@ReplaceWithMock
private Accessor accessor;
@Autowired
private Controller controller;
}
最後のケースでは、コンテキストを初期化した後、DateCalculator および Accessor Bean のみが必要なモックに正しく置き換えられますが、別の Bean は main context からの通常の Bean として自動配線されます。
デバッグ後、QualifierAnnotationAutowireCandidateResolverが Bean を正しく識別できないことがわかりました。229から始まる以下の行:
RootBeanDefinition bd = (RootBeanDefinition) bdHolder.getBeanDefinition();
AutowireCandidateQualifier qualifier = bd.getQualifier(type.getName());
Spring はモックされた依存関係から修飾子を抽出しようとしましたが、空です。
オブジェクトをモックするために依存関係を @Qualifier に正しく置き換える方法を知っておくとよいでしょう。