gpt4 book ai didi

java - Gradle 编译但不运行 TestNG 测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:04 25 4
gpt4 key购买 nike

我们刚刚开始在我们的项目中使用 Gradle 和 TestNG,所以我正在检查任何测试失败是否真的导致构建失败。我很惊讶地看到它没有。测试被正确提取和编译,所以我看到了类文件。我也确实得到了运行报告,但它说 0 次测试(预期 2 次)。运行 gradle clean test -i 给我以下信息:

:contentplatform-service:compileTestJava (Thread[Daemon worker Thread 7,5,main])
started.
:contentplatform-service:compileTestJava
Executing task ':contentplatform-service:compileTestJava' (up-to-date check took
0.08 secs) due to:
Output file D:\Dev\contentplatform-service\build\classes\test has changed.
Output file D:\Dev\contentplatform-service\build\dependency-cache has changed.

Output file D:\Dev\contentplatform-service\build\classes\test\nl\xillio\conten
tplatform\service\SuperSimpleTest.class has been removed.
All input files are considered out-of-date for incremental task ':contentplatfor
m-service:compileTestJava'.
Compiling with JDK Java compiler API.
:contentplatform-service:compileTestJava (Thread[Daemon worker Thread 7,5,main])
completed. Took 0.229 secs.
:contentplatform-service:processTestResources (Thread[Daemon worker Thread 7,5,m
ain]) started.
:contentplatform-service:processTestResources
Skipping task ':contentplatform-service:processTestResources' as it has no sourc
e files.
:contentplatform-service:processTestResources UP-TO-DATE
:contentplatform-service:processTestResources (Thread[Daemon worker Thread 7,5,m
ain]) completed. Took 0.001 secs.
:contentplatform-service:testClasses (Thread[Daemon worker Thread 7,5,main]) sta
rted.
:contentplatform-service:testClasses
Skipping task ':contentplatform-service:testClasses' as it has no actions.
:contentplatform-service:testClasses (Thread[Daemon worker Thread 7,5,main]) com
pleted. Took 0.001 secs.
:contentplatform-service:test (Thread[Daemon worker Thread 7,5,main]) started.
:contentplatform-service:test
Executing task ':contentplatform-service:test' (up-to-date check took 0.049 secs
) due to:
Output file D:\Dev\contentplatform-service\build\test-results\binary\test has
changed.
Output file D:\Dev\contentplatform-service\build\test-results has changed.
Output file D:\Dev\contentplatform-service\build\reports\tests has changed.
Finished generating test XML results (0.0 secs) into: D:\Dev\contentplatform-ser
vice\build\test-results
Generating HTML test report...
Finished generating test html results (0.014 secs) into: D:\Dev\contentplatform-
service\build\reports\tests
:contentplatform-service:test (Thread[Daemon worker Thread 7,5,main]) completed.
Took 0.194 secs.

SuperSimpleTest.java:

package nl.xillio.contentplatform.service;

import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

@Test
public class SuperSimpleTest {

@BeforeClass
public void setUp() {
// code that will be invoked when this test is instantiated
}

@Test
public void testTest() {
Assert.assertEquals(true, true);
}
}

build.gradle 包含:

test {
// enable TestNG support (default is JUnit)
useTestNG()
scanForTestClasses = false
include '**/*'

testLogging {
showStandardStreams = true

// log results to "build/test-results" directory
exceptionFormat "full"
events "started", "passed", "skipped", "failed", "standardOut", "standardError"
}
}

我已经看过了 other questions关于这个主题,我在那里找到了使用 scanForTestClasses = false 作为解决方法的提示(参见 https://issues.gradle.org/browse/GRADLE-1682 )。但是,这个问题似乎无关紧要。我在这里犯了其他一些菜鸟错误吗?我怎样才能让 SuperSimpleTest 直接执行?

更新:我试图强制 gradle 运行一个特定的测试,结果出现了一个有趣的错误:Gradle complains about JUnit version on TestNG task

最佳答案

这确实是一个愚蠢的菜鸟错误。我们正在使用一个多项目设置,其中包含一个主项目和同一级别的多个文件夹,其中包含代码和测试。我不小心使用的 build.gradle 仅将主项目配置为使用 TestNG。解决方案是将测试目标包含在 allprojectssubprojects 闭包中。此处解释:What is the difference between allprojects and subprojects

所以这里是工作build.gradle:

def mainClassName = 'nl.xillio.contentplatform.view.Run'


// Load settings for all projects including master and subprojects
allprojects {
apply plugin: 'java'
apply plugin: 'eclipse'

version '0.1'

repositories {
mavenCentral()
maven {
url 'http://mvnrepository.com/maven2'
}
maven {
url 'http://download.java.net/maven/2'
}
}
}

// Load the dependencies for all subprojects (layers)
subprojects {
dependencies {
//to do: move these to the correct subprojects
compile 'javax.inject:javax.inject:1'
compile 'org.springframework:spring-context:4.1.4.RELEASE'
compile 'org.springframework:spring-core:4.1.4.RELEASE'
compile 'org.springframework:spring-beans:4.1.4.RELEASE'
compile 'commons-logging:commons-logging:1.2'
testCompile 'org.springframework:spring-test:4.1.4.RELEASE'
testCompile 'org.testng:testng:6.1.1'
}

test {
// enable TestNG support (default is JUnit)
useTestNG()
}
}

// Resolve the dependencies between the layers in the individual project's build.gradle files
// add ONLY specific per project behaviour of the GLOBAL build here:

project(':contentplatform-web') {
}

project(':contentplatform-service') {
}

project(':contentplatform-dao') {
}

// Return a list of all the external libraries
def getLibraries() {
return configurations.runtime.filter{!it.name.startsWith('contentplatform')}
}

// Copy all the libraries to a libs folder
task copyLibraries(type: Copy) {
group 'Content Platform'
description 'Copy all the external libraries to the /libs folder.'

destinationDir file('./build/')

into('libs/') {
from getLibraries()
}
}

// Perform the build task before building the big jar
jar {
group 'Content Platform'
description 'Package all the layers and dependencies into a big jar.'

// The libraries are required to build
dependsOn(copyLibraries)

// The final big jar needs all the layers
dependencies {
compile project(':contentplatform-web'), project(':contentplatform-dao'),
project(':contentplatform-service'), project(':contentplatform-model')
}
// Create a MANIFEST.MF file, the main class file is in the web layer
manifest {
attributes 'Implementation-Title': 'Content Platform',
'Implementation-Version': version,
'Built-By': System.getProperty('user.name'),
'Built-Date': new Date(),
'Built-JDK': System.getProperty('java.version'),
'Class-Path': getLibraries().collect{'../libs/' + it.getName()}.join(' '),
'Main-Class': mainClassName
}

// Include the layers in the fat jar
from(configurations.compile.filter{it.name.startsWith('contentplatform')}.collect{it.isDirectory() ? it : zipTree(it) }) {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}

// Save the fat jar in the root of the folder instead of in build/libs
destinationDir file('.')
}

关于java - Gradle 编译但不运行 TestNG 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28150119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com