Gradle编译但不运行TestNG测试

我们刚开始在我们的项目中使用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" } } 

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

更新:我试图强制gradle运行一个特定的测试,结果有一个有趣的错误: Gradle在TestNG任务上抱怨JUnit版本

这确实是一个愚蠢的noob错误。 我们正在使用一个多项目设置,其中包含一个主项目和同一级别的几个文件夹,其中包含代码和测试。 我使用的build.gradle意外地只配置了主项目以使用TestNG。 解决方案是将测试目标包含在allprojectssubprojects闭包中。 这里解释了: 所有项目和子项目之间有什么区别

所以这是工作的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('.') }