我对 spring 注释有疑问。我想做的就是将整个必要的测试注释获取到具有公共(public)配置的一个注释,当 Spring Context 启动时(无法 Autowiring bean),我会得到空指针异常,但是当我在每个测试类中单独使用这些注释时,一切正常。
这是一个例子:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = { JPAConfig.class, AOPConfiguration.class })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class })
public @interface MyTestAnnotations {
}
我想使用 @MyTestAnnotations 的配置的测试用例
@MyTestAnnotations
public class AspectTest {
@Autowired
PagingAndSortingBookRepository pagingAndSortingRepo;
@Autowired
SmartLoggerAspect smartLoggerAspect;
JoinPoint joinPoint;
// other methods
@Test
public void pagingTest(){
// line below throws nullPointerException
pagingAndSortingRepo.findAll(new PageRequest(1, 1));
}
}
最佳答案
这是因为根据设计,您无法将 @ContextConfiguration 与自定义注释结合起来。 see the nice explanation provided sam branan why it would not work
你应该能够使用这样的东西
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class })
public @interface MyTestAnnotations {
}
@MyTestAnnotations
public abstract class AbstractBaseTests
{
}
@ContextConfiguration(classes = { JPAConfig.class, AOPConfiguration.class })
public class MyTest extends AbstractBaseTests {
}
关于java - 在单独的注释中测试配置注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40217976/