Download and build JUnit
Download the source from git, and executeant
.
The result jar file is compiled into junit4.11-SNAPSHOT directory.
Simple example
Class under test
public class Hello { int add(int x, int y) { return (x + y); } int sub(int x, int y) { return (x - y); } }
Test class
import junit.framework.*; import static org.junit.Assert.assertEquals; public class HelloTest extends TestCase { private Hello tester = null; protected void setUp() { tester = new Hello(); } public void testAdd() { assertEquals("Result1", 15, tester.add(10, 5)); } }TestCase comes from junit.framework.*, And you need to have '.' for classpath in order to find the class under the test. You need to copy the junit.jar in the classpath also.
Compile and execute
Thejunit.textui.TestRunner
is called with the test class (HelloTest) parameter.
javac Hello.java javac -cp .:junit-4.11-SNAPSHOT.jar HelloTest.java java -cp .:junit-4.11-SNAPSHOT.jar junit.textui.TestRunner HelloTest
. Time: 0.001 OK (1 test)
setUp() added
You can add setup() and tearDown() method.import junit.framework.*; import static org.junit.Assert.assertEquals; public class Hello2Test extends TestCase { private Hello tester = null; protected void setUp() { super.setup(); tester = new Hello(); } public void testSub2() { assertEquals("Result1", 15, tester.sub(20, 5)); } public void testSub() { assertEquals("Result1", 15, tester.sub(20, 5)); } }
Or, you can use @Override
@Override protected void setUp() { tester = new Hello(); }
Using suite()
You can make suite(), and add test methods to the suite.import junit.framework.*; import static org.junit.Assert.assertEquals; public class Hello2Test extends TestCase { private Hello tester = null; public Hello2Test(String str) { super(str); } @Override protected void setUp() { tester = new Hello(); } public void testAdd() { assertEquals("Result1", 15, tester.add(10, 5)); } public void testAdd2() { assertEquals("Result2", 25, tester.add(10, 15)); } public static Test suite() { TestSuite suite= new TestSuite(); suite.addTest( new Hello2Test("testAdd") { protected void runTest() { testAdd(); } } ); suite.addTest( new Hello2Test("testAdd2") { protected void runTest() { testAdd2(); } } ); return suite; } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } }
You can use dynamic way to put all the tests in the suite using one line of code with Java Reflection working behind the scene.
public static Test suite() { // method 1 return new TestSuite(HelloTest.class); }You can just execute the test like normal java code
javac Hello.java javac -cp .:junit-4.11-SNAPSHOT.jar HelloTest.java java -cp .:junit-4.11-SNAPSHOT.jar HelloTest
Merging tests with suite()
You can collect tests from TestCases to make test suite() to run.import junit.framework.*; public class HelloTestSuite { public static Test suite() { TestSuite suite= new TestSuite(); suite.addTest(new HelloTest("testAdd")); suite.addTest(new Hello2Test("testAdd")); suite.addTest(new Hello2Test("testAdd2")); return suite; } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } }One can even concatenate the test cases into suite.
public class HelloTestSuite { public static Test suite() { TestSuite suite= new TestSuite(); suite.addTestSuite(HelloTest.class); suite.addTestSuite(Hello2Test.class); return suite; } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } }
No comments:
Post a Comment