我有一个SpringBootTest集成测试,用于我正在开发的某个框架,该框架使用与SpringBootApplication内置的jpa。我添加了支持在没有jpa的情况下使用框架,为此我需要创建一个不使用jpa的不同的SpringBootApplication。
现在,单独运行时的测试类工作得很好,但是当我一起运行它时(运行不同Spring应用程序的不同测试类),第二顺序测试类失败,因为我似乎没有在测试类之间重置上下文。
我使用以下方法将测试分类:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ClassA.class, webEnviornemt ... etc)
@DirtiesContext (tried all the variations)
@ActiveProfiles("testA")
public class TestsA
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ClassB.class, webEnviornemt ... etc)
@DirtiesContext (tried all the variations)
@ActiveProfiles("testB")
public class TestsB
如果A类先运行,则B类失败,反之亦然。。
为什么SpringBootTest不会切换类,有什么建议吗?
我刚刚使用Spring引导2.5.4再次遇到这个问题,老实说,我有点惊讶它仍然是一个问题。因此,启动多个应用程序上下文显然是设计好的,不应该破坏任何东西(参见https://github.com/spring-projects/spring-boot/issues/23831),但是正如您所看到的,它目前似乎有点错误。因此,直到它是"resilent",我通常使用以下两个变通方法之一:
我的第一个解决方法包括在使用@springbootest
注释时始终使用相同的配置。例如,我有两个测试,一个是这样注释的@SpringBootTest(webEnvironment=webEnvironment.RANDOM\u PORT)
,另一个是这样注释的@SpringBootTest(webEnvironment=webEnvironment.DEFINED\u PORT)
,我可以很容易地切换到使用RANDOM\u PORT
。
我的第二个解决方案是为每个测试使用不同的文件夹,例如,我有一个非常“昂贵”的应用程序上下文,比如在我们的项目中,我们在文件夹src\Multitenanttest
中有多租户集成测试。文件夹中的所有测试将再次使用完全相同的上下文,因为配置对所有测试类都是相同的:
\\ ...
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { Olympia.class })
@ActiveProfiles({ OlympiaProfiles.TEST, OlympiaProfiles.MULTI_TENANT })
public class BillingAddressControllerTest
\\ ...
然后在gradle文件夹中,您可以为新的测试文件夹创建一个源集,如下所示(它是资源文件夹):
// ...
sourceSets {
multitenanttest {
java.srcDir "$projectDir/src/multitenanttest/java"
resources.srcDir "$projectDir/src/multitenanttest/resources"
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
}
}
configurations {
multitenanttestImplementation.extendsFrom testImplementation
multitenanttestRuntime.extendsFrom testRuntime
}
task multitenanttestTest(type: Test) {
testClassesDirs = sourceSets.multitenanttest.output.classesDirs
classpath = sourceSets.multitenanttest.runtimeClasspath
}
test.dependsOn multitenanttestTest
// ...
现在当我运行./gradlew test
时,一切都如预期的那样工作,不幸的是,eclipse你仍然必须单击单个文件夹。
我的项目中有一堆测试,它们都用@SpringBootTest注释,因此加载了一个SpringBoot上下文。 最近,我重构了一个测试,在这个测试中,我想要一个更小的范围(它是关于camunda的进程复盖率)到@RunWith(SpringJunit4ClassRunner.class)。因为这意味着没有上下文是自动加载的,所以我用静态内部类配置“手动”创建了一些bean。整个测试如下所示: 我不能
我正在尝试为我的一个rest应用程序编写集成测试用例,该应用程序在内部使用mongodb来持久化数据 但我正在犯错 看起来这两个是互斥的,那么如何做集成测试。
我们有一个库,为了自动配置库,我们使用spring.factories文件(),它提供了自动配置我的库的类。 参考资料 : https://docs.spring.io/spring-boot/docs/1.4.0.M3/reference/htmlsingle/#boot-features-custom-starter 我在spring.factories文件中有以下配置: 我的理解是sprin
当我运行命令gradle war integrationTest时,集成测试失败,因为它在服务项目中找不到上下文侦听器。错误消息的片段如下: 对此我们非常感谢您的帮助。提前致谢
我试图使用TestNG和SpringBootTest并行运行两个Cucumber测试,但当我的测试执行时,会发生以下情况 两个浏览器都打开并导航到维基百科主页 1个浏览器继续测试,另一个留在主页上 1个测试通过,另一个测试失败 我不知道为什么一个测试会停止执行,欢迎任何帮助。 回购:https://github.com/cmccarthyIrl/spring-cucumber-testng-par
我有一些问题。 允许在集成测试类中自动拥有控制器? 如何为这个控制器创建bean. 我有配置问题:help: