Java 在单独的注释中测试配置注释
我对spring注释有问题。我所要做的就是将所有必要的测试注释抓取到一个带有公共配置的注释中,当Spring上下文启动时(无法自动连接bean),我会得到空指针异常,但当我在每个测试类中单独使用这些注释时,一切正常 以下是一个例子:Java 在单独的注释中测试配置注释,java,spring,spring-annotations,spring-test,Java,Spring,Spring Annotations,Spring Test,我对spring注释有问题。我所要做的就是将所有必要的测试注释抓取到一个带有公共配置的注释中,当Spring上下文启动时(无法自动连接bean),我会得到空指针异常,但当我在每个测试类中单独使用这些注释时,一切正常 以下是一个例子: @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) @RunWith(SpringJUnit4ClassRunner.class) @WebAppCon
@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与自定义注释结合起来 你应该能用这样的东西
@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 {
}
当我将@RunWith(SpringJUnit4ClassRunner.class)从@MyTestAnnotations移动到AbstractBaseTest时,它会有所帮助。丹!我不知道为什么这家伙会在那里发生:@PrzemysławSienkiewicz是的。让我也有点好奇。我不确定这是否真的有效。无论如何,谢谢你的分享我是“那个家伙”,所以让我解释一下。。。JUnit4不支持将
@RunWith
用作元注释。因此,尽管Spring发现您的注释声明为元注释,但JUnit4不会找到@RunWith
,除非它直接在类上声明。这就是为什么不能将@RunWith
用作元注释的原因。