Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 JUnit. 2 Unit Testing with JUnit If code has no automated test case written for it to prove that it works, it must be assumed not to work. An API that.

Similar presentations


Presentation on theme: "1 JUnit. 2 Unit Testing with JUnit If code has no automated test case written for it to prove that it works, it must be assumed not to work. An API that."— Presentation transcript:

1 1 JUnit

2 2 Unit Testing with JUnit If code has no automated test case written for it to prove that it works, it must be assumed not to work. An API that does not have an automated test case to show how it works must be assumed un- maintainable. Software without automated test cases cannot be economically refactored. Software that that cannot be refactored cannot be extended economically.

3 3 Don't have the time for unit test? Productivity is directly related to the stability of your code base. – The fewer test cases you write, the less stable your code base becomes. – You spend all your time fixing unintended side effects and bugs.

4 4 Where to Get JUnit JUnit was written by Erich Gamma and Kent Beck. http://www.junit.org/index.htm

5 5 System.out.println is Not Enough It is hard to tell if a complex system is working because so many System.out.println methods are printing so much garbage. Second, you must determine if something works by looking at a String scrolling by on a console. The string of text scrolling by may make sense the day you wrote it, but will it still make sense in three months? Third, when you make changes, things can break in unexpected ways.

6 6 Overview of JUnit JUnit is a framework for writing unit tests. A test case defines a fixture to run a related set of tests. Typically, every class that you write should have a test case. A test fixture provides resources: primitive variables and objects that tests need to run. A test suite is a collection of related test cases.

7 7 Practice 1. Subclass junit.framework.TestCase. 2. If we need fixture objects, override the setUp() method. 3. Define a number of tests that return void and whose method name begins with test, such as testAdd(), testPut(), and testIterator(). 4. If we need to release resources that were part of the fixture, override the tearDown() method. 5. If we need to group a related set of test cases, define a suite of tests.

8 8 An example package xptoolkit.junit.example; import junit.framework.*; import java.util.Map; import java.util.HashMap; import junit.extensions.*; public class HashMapTest extends TestCase { private Map testMap; private Map testMap2; public HashMapTest(String name) { super(name); } public static Test suite() { return new TestSuite(HashMapTest.class); }

9 9 public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } private static final String APPLE_KEY = "AppleCEO"; private static final String APPLE_VALUE = "AppleCEO"; protected void setUp() { testMap = new HashMap(); testMap.put(APPLE_KEY, APPLE_VALUE); testMap.put("OracleCEO","Larry Ellison"); testMap2 = new HashMap(); testMap2.put("1", "1"); testMap2.put("2", "2"); }

10 10 public void testPut(){ String key = "Employee"; String value = "Rick Hightower"; //put the value in testMap.put(key, value); //read the value back out String value2 = (String)testMap.get(key); assertEquals("The value back from the map ", value, value2); } public void testSize(){ assertEquals (2, testMap.size()); } public void testGet(){ assertEquals(APPLE_VALUE, testMap.get(APPLE_KEY)); assertNull(testMap.get("JUNK_KEY")); }

11 11 public void testPutAll(){ testMap.putAll(testMap2); assertEquals (4, testMap.size()); assertEquals("1", testMap.get("1")); testGet(); } public void testContainsKey(){ assert("It should contain the apple key", testMap.containsKey(APPLE_KEY)); } public void testContainsValue(){ assert(testMap.containsKey(APPLE_VALUE)); }

12 12 public void testRemove(){ String key = "Employee"; String value = "Rick Hightower"; //put the value in testMap.put(key, value); //remove it testMap.remove(key); //try to read the value back out assertNull(testMap.get(key)); } }

13 13 Explanation 1 Step 1 is to define a class that derives junit.framework. import junit.framework.*;... public class HashMapTest extends TestCase {

14 14 Explanation 2 Next, if our test case needs a fixture, we override the setUp() method protected void setUp() { testMap = new HashMap(); testMap.put(APPLE_KEY, APPLE_VALUE); testMap.put("OracleCEO","Larry Ellison"); testMap2 = new HashMap(); testMap2.put("1", "1"); testMap2.put("2", "2"); } the fixture the test case sets up is actually instances of the class under test: the HashMap class. Garbage-collection will destroy the object.

15 15 Explanation 3 The HashMapTest class defines several tests to test the HashMap class. The JUnit framework uses reflection to look for methods whose names begin with test and uses them as test cases.

16 16 Explanation 4 It does this when we invoke the TestSuite constructor in the static suite() method, public static Test suite() { return new TestSuite(HashMapTest.class); } the composite design pattern

17 17 Explanation 5 assertEquals() assertTrue()

18 18 Explanation 6 Note that the setUp() and tearDown() methods are called before and after every textX() method that is run. Because the setUp() method does not allocate any resources that need to be released, the HashMapTest does not need to override the tearDown() method.

19 19 JUnit and Ant Copy junit.jar to Ant’s lib directory.

20 20

21 21

22 22 Reading work http://junit.sourceforge.net/doc/cook book/cookbook.htm http://junit.sourceforge.net/doc/cook book/cookbook.htm


Download ppt "1 JUnit. 2 Unit Testing with JUnit If code has no automated test case written for it to prove that it works, it must be assumed not to work. An API that."

Similar presentations


Ads by Google