This document discusses unit testing in Java using JUnit. It covers the basics of unit testing, the differences between JUnit versions 3.x and 4.x, how to write unit tests for the add and remove methods of a ShoppingCart class, and an introduction to test-driven development (TDD). TDD involves writing tests before writing code to define the desired behavior and help guide the development process.
7. How we did it // ShoppingCart.java public class ShoppingCart{ public void add(Product p, int quantity){ ... } public void remove(Product p, int quantity){ ... } } // Tomato.java public class Tomato implements Product{ ... }
8. Add Test in JUnit 3.x import junit.framework.TestCase; public class ShoppingCartTest extends TestCase { private ShoppingCart cart; public void testAdd (){ cart = new ShoppingCart(); Tomato t = new Tomato(); cart.add(t, 10); // Product and quantity assertEquals (cart.count(), 10); } }
9. Add Test in JUnit 4.x import org.junit.Test; import static org.junit.Assert.*; public class ShoppingCartTest{ private ShoppingCart cart; @Test public void testAdd() { cart = new ShoppingCart(); Tomato t = new Tomato(); cart.add(t, 10); assertEquals (cart.count(), 10); } }
10. Remove Test // Add @Test annotation for JUnit 4.x public void testRemove(){ cart = new ShoppingCart(); Tomato t = new Tomato(); cart.add(t, 10); cart.remove(t, 6); assertEquals(cart.count(), 4); }
11. Test Class public class ShoppingCartTest ... { private ShoppingCart cart; public void testAdd(){ cart = new ShoppingCart(); ... } public void testRemove(){ cart = new ShoppingCart(); ... } } Duplication!
13. Lifecycle 4.x @ Before @Test XXX1 @ After @ Before @Test XXX2 @ After @ Before @Test XXX3 @ After
14. Final Test Class public class ShoppingCartTest ... { ... // @org.junit.Before to be added for JUnit 4.x protected void setUp (){ cart = new ShoppingCart(); } // @org.junit.After to be added for JUnit 4.x protected void tearDown (){ cart = null; } // test* methods follow }
15. Other Assert Methods assertNull(...) assertArrayEquals(..., ...) assertEquals(..., ...) assertSame(..., ...) assertTrue(...) and Not of all the above.
16. Our Approach (so far)... We created the domain classes then the test cases to unit test them Another approach...
17. Test Driven Development (TDD) First write the test case Then program domain classes to comply to it What the #@&*?
19. What Tests Do? Tests define the behavior Tests define what you want to achieve Tests define what your program should do
20. When All These Are Defined... Your design is beautiful When dealing with implementation details, you will not loose focus You have a execution environment for running your code