Java Tutorial/JUnit/Test Suite

Материал из Java эксперт
Перейти к: навигация, поиск

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>