java - 在单独的注释中测试配置注释

标签 java spring spring-annotations spring-test

我对 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/

相关文章:

java - Hashmap图形输出错误

spring - 运行测试套件时 Ehcache 关闭导致异常

java - spring jdbc 优于 hibernate

java - 在 Spring @Configuration 中引用 applicationContext.xml bean

java - resultSet 字符串中的控制字符

java - 为什么我的插入方法在创建堆时给出了 java.lang.StackOverflowError。

java - 将复合主键添加到sql结果中

java - 无法将人员添加到自定义受众

java - 从java中带注释的bean获取数据库列名称

java - 使用 spring el 将值获取到 map 中