Java Tutorial/JUnit/Test Suite
Содержание
Define your own test case runner with reflection
<source lang="java">
import java.lang.reflect.Method; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public class TestSample extends TestCase {
public TestSample(String name) { super(name); } public void setUp() { } public void tearDown() { } public void testMe() { assertTrue(true); } public static Test suite() { return new TestSuite(TestSample.class); } public static void main(String[] args) { TestFinder.run(TestSample.class, args); }
} class TestFinder {
public static void run(Class which, String[] args) { TestSuite suite = null; if (args.length != 0) { try { java.lang.reflect.Constructor ctor; ctor = which.getConstructor(new Class[] { String.class }); suite = new TestSuite(); for (int i = 0; i < args.length; i++) { suite.addTest((TestCase) ctor.newInstance(new Object[] { args[i] })); } } catch (Exception e) { System.err.println("Unable to instantiate " + which.getName() + ": " + e.getMessage()); System.exit(1); } } else { try { Method suite_method = which.getMethod("suite", new Class[0]); suite = (TestSuite) suite_method.invoke(null, null); } catch (Exception e) { suite = new TestSuite(which); } } junit.textui.TestRunner.run(suite); }
}</source>
Per-Suite Setup and Tear-Down
<source lang="java">
import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public class TestClassTwo extends TestCase {
public TestClassTwo(String method) { super(method); } // This one takes a few hours... public void testLongRunner() { assertEquals(2300, 50); } public void testShortTest() { assertEquals(140, 5); } public void testAnotherShortTest() { assertEquals(586, 10); } public static Test suite() { TestSuite suite = new TestSuite(); // Only include short tests suite.addTest(new TestClassTwo("testShortTest")); suite.addTest(new TestClassTwo("testAnotherShortTest")); TestSetup wrapper = new TestSetup(suite) { protected void setUp() { oneTimeSetUp(); } protected void tearDown() { oneTimeTearDown(); } }; return wrapper; } public static void oneTimeSetUp() { } public static void oneTimeTearDown() { }
}</source>
Test suite
<source lang="java">
import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public class TestClassOne extends TestCase {
public TestClassOne(String method) { super(method); } public void testAddition() { assertEquals(4, 2 + 2); } public void testSubtraction() { assertEquals(0, 2 - 2); }
} class TestClassTwo extends TestCase {
public TestClassTwo(String method) { super(method); } public void testLongRunner() { assertEquals(2300, 0); } public static Test suite() { TestSuite suite = new TestSuite(); // Only include short tests suite.addTest(new TestClassTwo("testShortTest")); suite.addTest(new TestClassTwo("testAnotherShortTest")); return suite; }
} class TestClassComposite extends TestCase {
public TestClassComposite(String method) { super(method); } static public Test suite() { TestSuite suite = new TestSuite(); // Grab everything: suite.addTestSuite(TestClassOne.class); // Use the suite method: suite.addTest(TestClassTwo.suite()); return suite; }
}</source>
Use the test suite method
<source lang="java">
import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public class TestClassComposite extends TestCase {
public TestClassComposite(String method) { super(method); } static public Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(TestClassOne.class); suite.addTest(TestClassTwo.suite()); return suite; }
} class TestClassOne extends TestCase {
public TestClassOne(String method) { super(method); } public void testLongRunner() { assertEquals(2300, 50); }
} class TestClassTwo extends TestCase {
public TestClassTwo(String method) { super(method); } public void testLongRunner() { assertEquals(2300, 50); } public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(new TestClassTwo("testLongRunner")); return suite; }
}</source>