私の目標は注釈プロセッサをテストすることです。これを行うために、私は、テストパッケージ内の注釈でいくつかのテストデータを作成することに決めました。私の注釈プロセッサはSpringリポジトリを使用しますが、リポジトリが存在する場合でも毎回nullを返します。デバッグでは、私のリポジトリがapplicationContextに存在しないことに気付きました。 Springに私のリポジトリを強制的に見せることができますか?Repositories.getRepositoryFor()はSpringBootTestでnullを返します
私のテスト:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AnnotationConfigWebApplicationContext.class,
RepoConfig.class, AnnotationProcessor.class}, loader = AnnotationConfigContextLoader.class)
public class AnnotationProcessorTest{
@Autowired
private AnnotationProcessor processor;
@Test
public void test(){
assertNotNull(processor.getRepositories()); //Repositories is empty
}
}
レポジトリ:
@Repository
public interface MyRepository extends PagingAndSortingRepository<MyClass,
Serializable> {
}
MyClassの:
@Entity
public class MyClass implements Serializable{
@Id
private String ref;
private String field;
}
RepoConfig:
@Configuration
@EnableJpaRepositories(basePackageClasses = {MyRepository.class})
public class RepoConfig{
}
AnnotationProcessor:ここ
@Component
public class AnnotationProcessor{
@Autowired
private WebApplicationContext appContext;
private Repositories repositories;
@PostConstruct
public void init() {
repositories = new Repositories(appContext);
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(Repository.class, false, false));
scanner.findCandidateComponents("com").forEach(this::processRepository);
}
private void processRepository(BeanDefinition bean) {
Class<?> repoClass = Class.forName(bean.getBeanClassName());
Repository annotation = repoClass.getAnnotation(Repository.class);
//TODO: processing annotation
}
public Repositories getRepositories(){
return repositories;
}
}
AnnotationProcessorとは何ですか? – ryan2049
AnnotationProcessorは、MyClassのアノテーションを処理して特定のメタデータを生成するカスタムクラスです。そこには多くのロジックがありますが、アプリケーションコンテキストでリポジトリが見つからないためクラッシュします。 –
そのコードを含めてください。 – ryan2049