使用新的 Spring 上下文开始 JUnit 测试

Start JUnit test with fresh Spring Context

我使用 JUnit4 编写了两个单元测试 classes。他们都 运行 分别很好,但是 运行 一个接一个地测试它们(例如通过 mvn 测试),第二次测试失败。

第二次测试失败的原因是第一次测试修改了第一次测试中的一个bean。第二个测试想要使用这个 bean 的新实例。

单元测试应该为每个单元测试提供一个新的上下文class。 Spring 首先-class 支持上下文缓存,我想禁用它。我如何配置 Spring 为每个单元测试 class 重新启动一个新的 Context

我的测试 classes 配置如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:a.context.xml")
public class AUnitTest {

  @Test
  public void someTestMethod{
    doSomeFancyStuff();
  }
}

您可以在测试方法(或测试class)上使用@DirtiesContext。 Spring ApplicationContext 将在测试执行后重新加载。

您也可以在测试后使用 Mockito.reset()。 这将为您节省 Spring 上下文的加载时间。