2015-01-26 4 views
6

Wir haben grade Gradle und TestNG für unser Projekt verwendet, also überprüfe ich, ob der Test fehlschlägt. Ich war ziemlich überrascht, das nicht zu sehen. Die Tests werden korrekt aufgenommen und kompiliert, also sehe ich die Klassendateien. Ich bekomme auch einen Bericht über den Lauf, aber es sagt 0 Tests (erwartet 2). Laufen gradle clean test -i gibt mir folgendes:Gradle kompiliert, führt aber keine TestNG-Tests durch

: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 enthält:

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" 
    } 
} 

Ich habe bereits einen Blick auf other questions zu diesem Thema, und es Ich habe den Hinweis gefunden, scanForTestClasses = false als Workaround zu verwenden (siehe https://issues.gradle.org/browse/GRADLE-1682). Dieses Problem scheint jedoch unabhängig zu sein. Mache ich hier einen anderen Noob-Fehler? Wie kann ich SuperSimpleTest nur ausführen?

UPDATE: Ich hat versucht, zwingt gradle einen spezifischen Test mit einem interessanten Fehler als Folge auszuführen: Gradle complains about JUnit version on TestNG task

+0

Teile ein Beispielprojekt auf GH, bitte. Es wird einfacher zu helfen sein. – Opal

+0

Sorry würde gerne, kann das aber mit diesem Code nicht machen. Ich bin wirklich nur auf der Suche nach einem Doppel-Check, dass ich nichts Dummes einfach vergessen oder übersehen werde. – titusn

+0

Ich habe kürzlich ähnliches Problem gelöst: http://StackOverflow.com/Questions/28008918/gradle-not-running-testng-tests-even-with-test-usetestng/28077602#28077602, aber @amorfis stellte das Projekt zur Verfügung reproduziert das Problem. Es könnte hier schwierig sein:/ – Opal

Antwort

14

es in der Tat einen dummen Noob Fehler war. Wir verwenden ein Multi-Projekt-Setup mit einem Master-Projekt und mehreren Ordnern auf derselben Ebene, die den Code und die Tests enthalten. Die build.gradle Ich habe versehentlich nur das Master-Projekt für die Verwendung von TestNG konfiguriert. Die Lösung besteht darin, das Testziel in den allprojects oder subprojects Verschluss aufzunehmen. Welche wird hier erklärt: What is the difference between allprojects and subprojects

So, hier ist der Arbeits 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('.') 
}