如果您在不同的测试类中具有相同的应用程序上下文配置,那么spring基本上足以为您配置此功能。例如,假设您有两个类A和B,如下所示:
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class A {
@MockBean
private C c;
}
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class B {
@MockBean
private D d;
}
在此示例中,类A模仿bean C,而类B模仿beanD。因此,spring将它们视为两种不同的配置,因此将为类A加载一次应用程序上下文,为类B加载一次应用程序上下文。
如果相反,我们希望让Spring在这两个类之间共享应用程序上下文,则它们将看起来如下所示:
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class A {
@MockBean
private C c;
@MockBean
private D d;
}
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class B {
@MockBean
private C c;
@MockBean
private D d;
}
如果您像这样连接类,spring将只为类A或B加载应用程序上下文一次,具体取决于这两个类中哪个是首先在测试套件中运行的。这可以在多个测试类之间复制,唯一的标准是您不应以不同的方式自定义测试类。任何导致测试类与其他类不同的定制(在spring看来)最终将在spring之前创建另一个应用程序上下文。