Last active
December 14, 2015 05:09
-
-
Save djangofan/5033350 to your computer and use it in GitHub Desktop.
Trace the call order of JUnit annotations in a test suite.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apply plugin: 'java' | |
apply plugin: 'eclipse' | |
group = 'com.test' | |
ext { | |
projTitle = 'Test JUnit Annotation Order' | |
projVersion = '1.0' | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
compile group: 'junit', name: 'junit', version: '4.+' | |
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.+' | |
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.+' | |
} | |
tasks.withType(Test) { | |
jvmArgs '-Xms128m', '-Xmx1024m', '-XX:MaxPermSize=128m' | |
maxParallelForks = 4 | |
testLogging { | |
exceptionFormat "full" | |
events "started", "passed", "skipped", "failed", "standardOut", "standardError" | |
displayGranularity = 0 | |
} | |
forkEvery = 0 | |
} | |
// this task uses standard JUnit test suite styling | |
task testSuite(type: Test) { | |
include '**/TestSuite.class' | |
testReportDir = file("${reporting.baseDir}/TestSuite") | |
testResultsDir = file("${buildDir}/test-results/TestSuite") | |
} | |
// this task uses Gradle test filter styling without a defined suite | |
task testWithoutSuite(type: Test) { | |
include '**/XTest*.class' | |
testReportDir = file("${reporting.baseDir}/XTest") | |
testResultsDir = file("${buildDir}/test-results/XTest") | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<configuration> | |
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | |
<!-- encoders are assigned the type | |
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> | |
<encoder> | |
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> | |
</encoder> | |
</appender> | |
<appender name="FILE" class="ch.qos.logback.core.FileAppender"> | |
<file>build/logs/junit.log</file> | |
<append>false</append> | |
<!-- encoders are assigned the type | |
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> | |
<encoder> | |
<pattern>%-4r %-5level %logger{35}: %msg%n</pattern> | |
</encoder> | |
</appender> | |
<root level="DEBUG"> | |
<appender-ref ref="FILE" /> | |
</root> | |
<!-- We want error logging from this logger to go to an extra appender | |
It still inherits CONSOLE STDOUT from the root logger --> | |
<logger name="junit" level="INFO"> | |
<appender-ref ref="STDOUT" /> | |
</logger> | |
</configuration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
210 INFO com.test.StaticUtils: START | |
213 INFO com.test.StaticUtils: TestSuite:beforeClass | |
213 INFO com.test.StaticUtils: XTest1:beforeClass | |
216 INFO com.test.XTest1: XTest1:setUp | |
216 INFO com.test.XTest1: test11 | |
1219 INFO com.test.XTest1: XTest1:tearDown | |
1220 INFO com.test.XTest1: XTest1:setUp | |
1221 INFO com.test.XTest1: test12 | |
4221 INFO com.test.XTest1: XTest1:tearDown | |
4221 INFO com.test.XTest1: XTest1:setUp | |
4221 INFO com.test.XTest1: test13 | |
8222 INFO com.test.XTest1: XTest1:tearDown | |
8222 INFO com.test.XTest1: XTest1:setUp | |
8222 INFO com.test.XTest1: test14 | |
8473 INFO com.test.XTest1: XTest1:tearDown | |
8473 INFO com.test.XTest1: XTest1:setUp | |
8473 INFO com.test.XTest1: test15 | |
8473 INFO com.test.XTest1: XTest1:tearDown | |
8473 INFO com.test.StaticUtils: XTest1:afterClass | |
8474 INFO com.test.StaticUtils: XTest2:beforeClass | |
8474 INFO com.test.XTest2: XTest2:setUp | |
8474 INFO com.test.XTest2: test21 | |
16475 INFO com.test.XTest2: XTest2:tearDown | |
16475 INFO com.test.XTest2: XTest2:setUp | |
16475 INFO com.test.XTest2: test22 | |
16725 INFO com.test.XTest2: XTest2:tearDown | |
16725 INFO com.test.XTest2: XTest2:setUp | |
16725 INFO com.test.XTest2: test23 | |
17725 INFO com.test.XTest2: XTest2:tearDown | |
17725 INFO com.test.XTest2: XTest2:setUp | |
17725 INFO com.test.XTest2: test24 | |
17725 INFO com.test.XTest2: XTest2:tearDown | |
17725 INFO com.test.XTest2: XTest2:setUp | |
17725 INFO com.test.XTest2: test25 | |
18726 INFO com.test.XTest2: XTest2:tearDown | |
18726 INFO com.test.StaticUtils: XTest2:afterClass | |
18726 INFO com.test.StaticUtils: TestSuite:afterClass | |
198 INFO com.test.StaticUtils: XTest2:beforeClass | |
199 INFO com.test.StaticUtils: XTest1:beforeClass | |
203 INFO com.test.XTest2: XTest2:setUp | |
203 INFO com.test.XTest2: test21 | |
204 INFO com.test.XTest1: XTest1:setUp | |
204 INFO com.test.XTest1: test11 | |
1208 INFO com.test.XTest1: XTest1:tearDown | |
1209 INFO com.test.XTest1: XTest1:setUp | |
1209 INFO com.test.XTest1: test12 | |
4211 INFO com.test.XTest1: XTest1:tearDown | |
4211 INFO com.test.XTest1: XTest1:setUp | |
4211 INFO com.test.XTest1: test13 | |
8209 INFO com.test.XTest2: XTest2:tearDown | |
8211 INFO com.test.XTest2: XTest2:setUp | |
8211 INFO com.test.XTest2: test22 | |
8211 INFO com.test.XTest1: XTest1:tearDown | |
8211 INFO com.test.XTest1: XTest1:setUp | |
8211 INFO com.test.XTest1: test14 | |
8461 INFO com.test.XTest1: XTest1:tearDown | |
8461 INFO com.test.XTest2: XTest2:tearDown | |
8461 INFO com.test.XTest2: XTest2:setUp | |
8461 INFO com.test.XTest1: XTest1:setUp | |
8461 INFO com.test.XTest1: test15 | |
8461 INFO com.test.XTest1: XTest1:tearDown | |
8462 INFO com.test.StaticUtils: XTest1:afterClass | |
8462 INFO com.test.XTest2: test23 | |
9462 INFO com.test.XTest2: XTest2:tearDown | |
9462 INFO com.test.XTest2: XTest2:setUp | |
9462 INFO com.test.XTest2: test24 | |
9462 INFO com.test.XTest2: XTest2:tearDown | |
9462 INFO com.test.XTest2: XTest2:setUp | |
9463 INFO com.test.XTest2: test25 | |
10463 INFO com.test.XTest2: XTest2:tearDown | |
10463 INFO com.test.StaticUtils: XTest2:afterClass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.test; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
public abstract class StaticUtils { | |
protected Logger logger = LoggerFactory.getLogger( getClass() ); | |
protected static Logger staticlogger = LoggerFactory.getLogger( StaticUtils.class ); | |
public static void waitTimer( int units, int mills ) { | |
// number of units of time * mills in length for each time unit | |
try { | |
Thread.currentThread(); | |
int x = 0; | |
while( x < units ) { | |
Thread.sleep( mills ); | |
x = x + 1; | |
} | |
} catch ( InterruptedException ex ) { | |
ex.printStackTrace(); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
210 INFO com.test.StaticUtils: START | |
213 INFO com.test.StaticUtils: TestSuite:beforeClass | |
213 INFO com.test.StaticUtils: XTest1:beforeClass | |
216 INFO com.test.XTest1: XTest1:setUp | |
216 INFO com.test.XTest1: test11 | |
1219 INFO com.test.XTest1: XTest1:tearDown | |
1220 INFO com.test.XTest1: XTest1:setUp | |
1221 INFO com.test.XTest1: test12 | |
4221 INFO com.test.XTest1: XTest1:tearDown | |
4221 INFO com.test.XTest1: XTest1:setUp | |
4221 INFO com.test.XTest1: test13 | |
8222 INFO com.test.XTest1: XTest1:tearDown | |
8222 INFO com.test.XTest1: XTest1:setUp | |
8222 INFO com.test.XTest1: test14 | |
8473 INFO com.test.XTest1: XTest1:tearDown | |
8473 INFO com.test.XTest1: XTest1:setUp | |
8473 INFO com.test.XTest1: test15 | |
8473 INFO com.test.XTest1: XTest1:tearDown | |
8473 INFO com.test.StaticUtils: XTest1:afterClass | |
8474 INFO com.test.StaticUtils: XTest2:beforeClass | |
8474 INFO com.test.XTest2: XTest2:setUp | |
8474 INFO com.test.XTest2: test21 | |
16475 INFO com.test.XTest2: XTest2:tearDown | |
16475 INFO com.test.XTest2: XTest2:setUp | |
16475 INFO com.test.XTest2: test22 | |
16725 INFO com.test.XTest2: XTest2:tearDown | |
16725 INFO com.test.XTest2: XTest2:setUp | |
16725 INFO com.test.XTest2: test23 | |
17725 INFO com.test.XTest2: XTest2:tearDown | |
17725 INFO com.test.XTest2: XTest2:setUp | |
17725 INFO com.test.XTest2: test24 | |
17725 INFO com.test.XTest2: XTest2:tearDown | |
17725 INFO com.test.XTest2: XTest2:setUp | |
17725 INFO com.test.XTest2: test25 | |
18726 INFO com.test.XTest2: XTest2:tearDown | |
18726 INFO com.test.StaticUtils: XTest2:afterClass | |
18726 INFO com.test.StaticUtils: TestSuite:afterClass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//https://github.com/djangofan/JUnitSuiteCallOrder | |
package com.test; | |
import org.junit.After; | |
import org.junit.AfterClass; | |
import org.junit.Before; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.junit.runners.Suite; | |
import org.junit.runners.Suite.SuiteClasses; | |
@RunWith(Suite.class) | |
@SuiteClasses( { XTest1.class, XTest2.class } ) | |
public class TestSuite extends StaticUtils { | |
@BeforeClass | |
public static void beforeClass() { | |
staticlogger.info("START"); | |
staticlogger.info("TestSuite:beforeClass"); | |
} | |
@Before | |
public void setUp() { // not called by JUnit runner? | |
logger.info("TestSuite:setUp"); | |
} | |
@Test | |
public void suite() { // not called by JUnit runner? | |
logger.info("TestSuite:suite"); | |
} | |
@After | |
public void tearDown() { // not called by JUnit runner? | |
logger.info("TestSuite:tearDown"); | |
} | |
@AfterClass | |
public static void afterClass() { | |
staticlogger.info("TestSuite:afterClass"); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.test; | |
import org.junit.After; | |
import org.junit.AfterClass; | |
import org.junit.Before; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
public class XTest1 extends StaticUtils{ | |
@Test | |
public void test11() { | |
String msg = "test11"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(4, 250); // 1 second | |
} | |
@Test | |
public void test12() { | |
String msg = "test12"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(12, 250); // 3 second | |
} | |
@Test | |
public void test13() { | |
String msg = "test13"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(16, 250); // 4 second | |
} | |
@Test | |
public void test14() { | |
String msg = "test14"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(1, 250); // 1 second | |
} | |
@Test | |
public void test15() { | |
String msg = "test15"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
} | |
@BeforeClass | |
public static void beforeClass() { | |
staticlogger.info("XTest1:beforeClass"); | |
} | |
@Before | |
public void setUp() { | |
logger.info("XTest1:setUp"); | |
} | |
@After | |
public void tearDown() { | |
logger.info("XTest1:tearDown"); | |
} | |
@AfterClass | |
public static void afterClass() { | |
staticlogger.info("XTest1:afterClass"); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.test; | |
import org.junit.After; | |
import org.junit.AfterClass; | |
import org.junit.Before; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
public class XTest2 extends StaticUtils{ | |
@Test | |
public void test21() { | |
String msg = "test21"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(32, 250); // 8 second | |
} | |
@Test | |
public void test22() { | |
String msg = "test22"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(1, 250); // 1 second | |
} | |
@Test | |
public void test23() { | |
String msg = "test23"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(4, 250); // 1 second | |
} | |
@Test | |
public void test24() { | |
String msg = "test24"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
} | |
@Test | |
public void test25() { | |
String msg = "test25"; | |
logger.info( msg ); | |
System.out.println( msg ); | |
waitTimer(4, 250); // 1 second | |
} | |
@BeforeClass | |
public static void beforeClass() { | |
staticlogger.info("XTest2:beforeClass"); | |
} | |
@Before | |
public void setUp() { | |
logger.info("XTest2:setUp"); | |
} | |
@After | |
public void tearDown() { | |
logger.info("XTest2:tearDown"); | |
} | |
@AfterClass | |
public static void afterClass() { | |
staticlogger.info("XTest2:afterClass"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment