How to run Junit TestSuites from gradle?
Asked Answered
P

1

15

I am trying to migrate from Ant build to Gradle in my project. There are a bunch of test cases (subclasses of junit.framework.TestCase) and few test suites (subclasses of junit.framework.TestSuite). Gradle automatically picked up all test cases(subclasses of junit.framework.TestCase) to be run, but not the suites (subclasses of junit.framework.TestSuite).

I probably could work around by calling ant.junit to run it. But, I feel there should be a native easy way to force gradle to pick them and run. I couldn't find anything in the document . Am I missing something?

Pisgah answered 7/3, 2012 at 18:14 Comment(2)
You seem to be contradicting yourself... you are saying that 'Gradle automatically picked up all test cases to be run.' So the problem is that it compiled them, but did not run them? Please clarify.Plastered
@c_maker: I've edited the text to improve clarity. Thanks for pointing out.Pisgah
O
15

This was hard for me to figure out, but here is an example:

// excerpt from https://github.com/djangofan/WebDriverHandlingMultipleWindows
package webdriver.test;
import http.server.SiteServer;
import java.io.File;
import java.io.IOException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({ TestHandleCacheOne.class, TestHandleCacheThree.class, TestHandleCacheThree.class })
public class SuiteOne extends MultiWindowUtils {

    public static SiteServer fs;

    @BeforeClass
    public static void setUpSuiteOne() {
        File httpRoot = new File("build/resources/test");
        System.out.println("Server root directory is: " + httpRoot.getAbsolutePath() );
        int httpPort = Integer.parseInt("8080");
        try {
            fs = new SiteServer( httpPort , httpRoot );
        } catch (IOException e) {
            e.printStackTrace();
        }
        initializeBrowser( "firefox" );
        System.out.println("Finished setUpSuiteOne");
    }

    @AfterClass
    public static void tearDownSuiteOne() {
        closeAllBrowserWindows();  
        System.out.println("Finished tearDownSuiteOne");
    }

}

And a build.gradle similar to this:

apply plugin: 'java'
apply plugin: 'eclipse'
group = 'test.multiwindow'

ext {
    projTitle = 'Test MultiWindow'
    projVersion = '1.0'
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '2.+'
    compile group: 'junit', name: 'junit', version: '4.+'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.+'
}

task testGroupOne(type: Test) {
   //include '**/*SuiteOne.*'
   include '**/SuiteOne.class'
   reports.junitXml.destination = "$buildDir/test-results/SuiteOne")
   reports.html.destination = "$buildDir/test-results/SuiteOne")
}

task testGroupTwo(type: Test) {
   //include '**/*SuiteTwo.*'
   include '**/SuiteTwo.class'
   reports.junitXml.destination = "$buildDir/test-results/SuiteTwo")
   reports.html.destination = "$buildDir/test-results/SuiteTwo")
}
Orphrey answered 9/2, 2013 at 19:46 Comment(1)
I should say that since I posted this answer the DSL for configuring unit tests has changed a bit. So, beware.Orphrey

© 2022 - 2024 — McMap. All rights reserved.