【问题标题】:Junit testing started spring contextJunit 测试开始 Spring 上下文
【发布时间】:2012-12-26 02:59:10
【问题描述】:

我有一个 junit 测试用例,它用 @RunWith(SpringJUnit4ClassRunner.class)

在这个 spring 上下文中,我有实现 Lifecycle 接口的 bean。

如何在调用测试之前“启动”spring 上下文并在之后再次停止它?

【问题讨论】:

    标签: spring junit


    【解决方案1】:
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "/applicationContext-TEST.xml")
    public class MyIntegrationTest {}
    

    然后像往常一样引用 bean

    【讨论】:

      【解决方案2】:

      @RunWith(SpringJUnit4ClassRunner.class) 在名为 MyTestCase 的类之上就足够了。 Spring test framework 将在 CLASSPATH 上查找 MyTestCase-test.xml 文件。如果您不喜欢这种命名约定,您可以指定自己的:

      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration(locations = "/applicationContext.xml")
      public class MyTestCase {
      
        @Autowired
        private Dependency dep;
      
      }
      

      如何在调用测试之前“启动”spring 上下文并在之后再次停止它?

      通常您无需执行任何操作。 Spring 将在第一次测试之前启动应用程序上下文,并在运行测试的 JVM 关闭时自动关闭它。您还可以在每次测试后重新启动上下文(请参阅@DirtiesContext 注释)。

      【讨论】:

      • 你确定吗?在我的情况下,应用程序上下文似乎没有“启动”。我指的是生命周期意义上的“开始”(由生命周期接口定义)。
      • @DennisThrysøe 生命周期的开始部分将执行(因为我依靠它连接到 RabbitMQ 进行我自己的测试),但正如 Tomasz 所说,它应该只发生一次每个测试套件执行(即 JVM 负载)。对此的一个警告是:如果您的测试无法加载上下文,Spring 将尝试在每个测试上重新加载上下文(是的,这非常慢)。确保您的上下文不会静默失败(通常尽管您会知道它何时失败)。
      • 我使用 @RunWith(SpringJUnit4ClassRunner.class) 但应用程序上下文没有启动。如果我在每次测试之前手动启动它,一切都会运行良好。有什么想法会使创建的应用程序上下文启动吗?
      猜你喜欢
      • 2014-02-09
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 2012-01-20
      • 2021-07-26
      • 2015-09-02
      • 1970-01-01
      • 2013-08-03
      相关资源
      最近更新 更多