【问题标题】:Using @RunWith(SpringJUnit4ClassRunner.class), can you access the ApplicationContext object?使用@RunWith(SpringJUnit4ClassRunner.class),可以访问ApplicationContext对象吗?
【发布时间】:2013-01-27 04:18:51
【问题描述】:

我有一个 Spring 测试使用:

@RunWith(SpringJUnit4ClassRunner.class)

与旧的测试方法不同,从 Spring 测试基类扩展,似乎没有明显的方法可以访问 Spring 使用 @ContextConfiguration 加载的 ApplicationContext

如何从我的测试方法中访问ApplicationContext 对象?

谢谢!

【问题讨论】:

    标签: java spring unit-testing junit integration-testing


    【解决方案1】:

    我用这个:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
    @FixMethodOrder(MethodSorters.NAME_ASCENDING)
    public class MyClassTest
    {
    }
    

    然后转到项目构建路径-> Source -> 添加您的applicationContext.xml 的位置

    我使用 maven,所以 applicationContext.xmlsrc/main/resources 之下。

    如果你使用这个方法,你可以有多个 applicationContext 用于测试 例如:

    @ContextConfiguration("classpath:applicationContext_Test.xml")
    

    @ContextConfiguration("classpath:applicationContext_V01.xml")
    

    【讨论】:

      【解决方案2】:

      来自 Spring 文档的 Integration Testing 部分

      @Autowired ApplicationContext

      作为实现 ApplicationContextAware 接口的替代方法,您可以通过字段或 setter 方法上的 @Autowired 注释为您的测试类注入应用程序上下文。例如:

      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration
      public class MyTest {
      
        @Autowired
        private ApplicationContext applicationContext;
      
        // class body...
      }
      

      【讨论】:

        【解决方案3】:

        添加ApplicationContext的@Autowired属性

        @Autowired ApplicationContext applicationContext;
        

        【讨论】:

          猜你喜欢
          • 2017-07-05
          • 2021-06-22
          • 1970-01-01
          • 2018-01-23
          • 1970-01-01
          • 2013-12-31
          • 2011-07-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多