区块链技术博客
www.b2bchain.cn

如何在Gradle的JUnit Platform中进行两组测试 – java程序员分享

D0b2wT.gif

本文介绍了如何在Gradle的JUnit Platform中进行两组测试 – java程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我正在通过Gradle使用JUnit 5平台。

我当前的构建文件具有配置子句

junitPlatform {     platformVersion '1.0.0-M5'     logManager 'java.util.logging.LogManager'     enableStandardTestTask true      filters {         tags {             exclude 'integration-test'         }         packages {             include 'com.scherule.calendaring'         }     } } 

很好但是我还需要运行集成测试,这需要构建,泊坞化应用程序并在后台运行该应用程序。因此,我应该有第二种配置,只有这样才能启动…如何实现?通常我会扩展Test任务来创建IntegrationTest任务,但是它不适合没有简单任务运行测试的JUnit Platform。

我知道我可以这样

task integrationTests(dependsOn: "startMyAppContainer") {     doLast {         def request = LauncherDiscoveryRequestBuilder.request()                 .selectors(selectPackage("com.scherule.calendaring"))                 .filters(includeClassNamePatterns(".*IntegrationTest"))                 .build()          def launcher = LauncherFactory.create()          def listener = new SummaryGeneratingListener()         launcher.registerTestExecutionListeners(listener)         launcher.execute(request)     }      finalizedBy(stopMyAppContainer) } 

但是有没有更简单的方法?更加一致。

参考方案

尚未通过JUnit5插件在Gradle中完全支持此功能(尽管它一直都在靠近)。有几种解决方法。这是我使用的一种:有点冗长,但它与maven的测试与验证功能相同。

区分(单元)测试和集成测试类。

Gradle的main和test sourceSets很好。添加一个仅描述您的集成测试的新integrationTest sourceSet。您可以使用文件名,但这可能意味着您必须调整测试sourceSet来跳过当前包含的文件(在您的示例中,您希望从测试sourceSet中删除“。* IntegrationTest”,并将其仅保留在integrationTest中sourceSet)。因此,我更喜欢使用不同于测试sourceSet的根目录名称。

sourceSets {   integrationTest {     java {       compileClasspath += main.output + test.output       runtimeClasspath += main.output + test.output       srcDir file('src/integrationTest/java')     }     resources.srcDir file('src/integrationTest/resources')   } } 

由于我们有Java插件,因此可以很好地创建integrationTestCompileintegrationTestRuntime函数,以便与dependencies块一起使用:

dependencies {     // .. other stuff snipped out ..     testCompile "org.assertj:assertj-core:${assertjVersion}"      integrationTestCompile("org.springframework.boot:spring-boot-starter-test") {         exclude module: 'junit:junit'     } } 

真好!

将集成测试添加到构建过程中的正确位置

正如您指出的,您确实需要执行运行集成测试的任务。您可以像示例中那样使用启动器。我只是委托给现有的控制台运行器,以利用简单的命令行选项。

def integrationTest = task('integrationTest',                            type: JavaExec,                            group: 'Verification') {     description = 'Runs integration tests.'     dependsOn testClasses     shouldRunAfter test     classpath = sourceSets.integrationTest.runtimeClasspath      main = 'org.junit.platform.console.ConsoleLauncher'     args = ['--scan-class-path',             sourceSets.integrationTest.output.classesDir.absolutePath,             '--reports-dir', "${buildDir}/test-results/junit-integrationTest"] } 

该任务定义包括dependsOn和shouldRunAfter,以确保在运行集成测试时先运行单元测试。为了确保在./gradlew check时运行集成测试,您需要更新检查任务:

check {   dependsOn integrationTest } 

现在,您可以使用./gradlew test之类的./mvnw test./gradlew check之类的./mvnw verify

Java-如何将此字符串转换为日期? – java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

Java:正则表达式模式匹配器是否有大小限制? – java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 🙂

Java:线程池如何将线程映射到可运行对象 – java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? – java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 – java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 如何在Gradle的JUnit Platform中进行两组测试 – java程序员分享
分享到: 更多 (0)
D0b2wT.gif

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们