Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Unit testing Java programs Using JUnit 4 “If it isn't tested, it doesn’t work” Unit testing Java programs 1 Testing • Larman – a disciplin in UP but very little in practice • UPEDU – description Unit testing Java programs 2 The Unified Software Development Process: Test procedure (V-model) Start Delivery Requirement Specification Program Design Module Design Accept Test Integration Test Module Test Module Coding Testing in XP – Module code Test • Testing is an important discipline in XP (Extreme Programming) • XP idea: Create the test before the code to be tested – Writing the test makes you thing about detailed design • Test is an executable requirements – Writing (and running) test will be a positive experience. – We know when a class is done • When all tests run Unit testing Java programs 4 Requirements for tests • Tests must be executable • A test must clearly show whether it executed successfully or not – The not-so-successful part of the test must not be buried in a pile of test reports. Unit testing Java programs 5 Which methods should be tested • Test a method if you are not 100% sure that the method is correct. • Methods that usually does not need testing – Simple get and set methods • However, you might call get and set methods in testing other (more complex) methods – Simple toString methods Unit testing Java programs 6 The Unified Software Development Process: Example testcase Test Step Input/Action Expected Output Result 1 Create an account or look up an existing one. Use the apposite link to create a billing event. A billing event is created. The account balance change reflects the presence of the new billing event Account balance: an amount is not shown in a proper way. Se screen shot Test Case 1. Test cases - Example • A property value of int between 2 and 9 Test Case Test value expected 1 1 (before boundary) rejected 2 2 (the boundary) accepted 3 3 (after boundary) accepted 4 8 (before boundary) accepted 5 9 (the boundary) accepted 6 10 (after boundary) rejected 7 5 (some value in middle) accepted 8 -3 (a negative number) rejected Unit testing Java programs result 8 Do the exercise Unit testing Java programs 9 Individual test cases How to in JUnit • Annotate the test method with @org.junit.Test – No need to extends any classes or use special method names • Unlike JUnit 3 • Generally you would like one test class pr. Java class – The unit to test is a class. Unit testing Java programs 10 Fixtures: Before and After • Sometimes you have 2 or more tests that must run on the same data. – To ease this JUnit introduces the concept of a “fixture”. • You can annotate 2 methods in your test class from – @org.junit.Before • Executed before each individual test • Used to initialize test data • Used quite often – @org.junit.After • Executed after each individual test • Used to clean up after the test – Examples: Close database or socket connections • Not used very often Unit testing Java programs 11 How to test exceptions • JUnit 3: Testing an expected exception try { method(); fail(“Exception expected”); } catch (ExpectedException ex) { /* ignore */ } • JUnit 4: Testing an expected exception – Use an annotation • @Test (expected = SomeException.class) public void testMetod() { … } • If testMethod() does not throw SomeException the test fails. Unit testing Java programs 12 NetBeans assistance • JUnit is a plugin to NetBeans – And many other IDE’s • NetBeans can assist you in making TestCases for individual Java class and in assembling the test cases into test suites. – Right click the class you want to test – Tools → JUnit tests • Choose JUnit 4 (not JUnit 3) – JUnit generates empty tests for each public / protected method in a Java class. – Fill you the empty tests and run the test. • Like you run an ordinary program Unit testing Java programs 13 References Beck & Gamma JUnit Cookbook, http://junit.sourceforge.net/doc/cookbook/cookbook.htm Kent Beck & Erich Gamma invented JUnit Martin Fowler Refactoring, Addison Wesley 2000 Chapter 4 Building Tests, page 89-102 Extreme Programming, Code the Unit Test First http://www.extremeprogramming.org/rules/testfirst.html Testing is an important discipline in XP (eXtreme Programming), which is another Kent Bech invention. Alex Garrett JUnit antipatterns http://www-128.ibm.com/developerworks/opensource/library/os-junit Unit testing Java programs 14