Download presentation
Presentation is loading. Please wait.
Published byEugenia Harrington Modified over 9 years ago
2
Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev March, 23 - 24, 2013 SWU, Blagoevgrad
3
3 Lesson Contents: §Unit Testing §Introduction to JUnit §JUnit within/under NetBeans
4
Unit Testing 4
5
Categories of Testing 5 User needs Acceptance testing Requirement specification System testing Design Code Integration testing Unit testing
6
Testing6 Unit Testing §Different modules tested separately §Focus: to detect defects injected during coding §UT is closely associated with coding §Frequently the developer himself does UT §SDM coding phase sometimes called “coding and unit testing” phase
7
What is Unit Testing? A Unit Test is a procedure to validate a single Functionality of an application. One Functionality One Unit Test Unit Tests are automated and self-checked. They run in isolation of each other. They do NOT depend on or connect to external resources, like DB, Network etc. They can run in any order and even parallel to each other. 7 Impetus Confidential
8
JUnit – An Introduction - 8
9
JUnit – An introduction JUnit is a unit testing framework for Java. It comes from the family of unit testing frameworks, collectively called xUnit, where ‘x’ stands for the programming language, e.g. NUnit for C#, CPPUnit, JSUnit, PHPUnit, PyUnit, RUnit etc. Kent Beck & Erich Gamma originally wrote this framework for ‘smalltalk’, called SUnit. 9 Impetus Confidential
10
Why choose JUnit? JUnit is simple and elegant. JUnit checks its own results and provide immediate customized feedback. JUnit is hierarchial. JUnit has the widest IDE support, Eclipse, NetBeans, BlueJ, …. JUnit is recognized by popular build tools like, ant, maven etc. And… it’s free. 10 Impetus Confidential
11
Design of JUnit 11 Impetus Confidential junit.framework.TestCase is the abstract command class which you subclass into your Test Classes. junit.framework.TestSuite is a composite of other tests, either TestCase or TestSuite. This behavior helps you create hierarchal tests with depth control.
12
Design of JUnit 12 Impetus Confidential Image Courtesy: JUnit: A Cook’s Tour
13
Write a test case Define a subclass XXXTest of junit.framework.TestCase public class CalculatorTest extends TestCase { … } Define one or more testXXX() methods that can perform the tests and assert expected results. public void testAddition(){ Calculator calc = new Calculator(); int expected = 25; int result = calc.add(10, 15); assertEquals(result, expected); // asserting } 13 Impetus Confidential
14
Write a test case Each test method has to be structured like this: public void testAddition(){ // declarations Calculator calc = new Calculator(); // preparing input /expected/ data int expected = 25; // computing result /real, actual/ data int result = calc.add(10, 15); // comparing result data to expected data assertEquals(result, expected); // asserting } 14 Impetus Confidential
15
Write a test case Override setUp() method to perform initialization. @Override protected void setUp() { // Initialize anything, like calc = new Calculator(); } Override tearDown() method to clean up. @Override protected void tearDown() { // Clean up, like calc = null; // gc, no need of delete operator } 15 Impetus Confidential
16
Asserting expectations assertEquals (expected, actual) assertEquals (message, expected, actual) assertEquals (expected, actual, delta) assertEquals (message, expected, actual, delta) assertFalse ((message)condition) Assert(Not)Null (object) Assert(Not)Null (message, object) Assert(Not)Same (expected, actual) Assert(Not)Same (message, expected, actual) assertTrue ((message), condition) 16 Impetus Confidential
17
Failure? JUnit uses the term failure for a test that fails expectedly. That is An assertion was not valid or A fail() was encountered. 17 Impetus Confidential
18
Write a test case public class CalculatorTest extends TestCase { // initialize protected void setUp()...S public void testAddition()... T1 public void testSubtraction()...T2 public void testMultiplication()...T3 // clean up protected void tearDownUp()...D } Execution will be S T1 D, S T2 D, S T3 D in any order. 18 Impetus Confidential
19
Write a test suite Write a class with a static method suite() that creates a junit.framework.TestSuite containing all the Tests. public class AllTests { public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(.class); return suite; } 19 Impetus Confidential
20
Run your tests You can either run TestCase or TestSuite instances. A TestSuite will automatically run all its registered TestCase instances. All public testXXX() methods of a TestCase will be executed. But there is no guarantee of the order. 20 Impetus Confidential
21
Run your tests JUnit comes with TestRunners that run your tests and immediately provide you with feedbacks, errors, and status of completion. JUnit has Textual and Graphical test runners. Textual Runner >> java junit.textui.TestRunner AllTests or, junit.textui.TestRunner.run(AllTests.class); Graphical Runner >> java junit.swingui.TestRunner AllTests or, junit.swingui.TestRunner.run(AllTests.class); IDE like Eclipse, NetBeans “Run as JUnit” 21 Impetus Confidential
22
Mocks Mocking is a way to deal with third-party dependencies inside TestCase. Mocks create FAKE objects to mock a contract behavior. Mocks help make tests more unitary. 22 Impetus Confidential
23
How to approach? 23 Impetus Confidential Test a little, Code a little, Test a little, Code a little … doesn’t it rhyme? ;) Write tests to validate functionality, not functions. If tempted to write System.out.println() to debug something, better write a test for it. If a bug is found, write a test to expose the bug.
24
JUnit – within/under NetBeans - .. 24 Impetus Confidential
25
25 JUnit within/under NetBeans §Practical Manual: §Practical conventions §How to build unit tests? §How to run unit tests? §Demo task §Practical exercise task
26
26 Practical conventions §Each production code class X has a test code class Xtest derived from TestCase class §Each method y(){…} from class X has a method testy(){…} from Xtest class §Each test code class Xtest has setUp() method and tearDown() method
27
27 Practical conventions §All production code located in a separate project folder Source Packages §All test code located in another separate project folder Test Packages §The skeletal structure and mostly the contents of a test code class Xtest and test code methods generated automatically
28
28 How to build unit tests? Part 1 §Create New project §Add Java class with main() method §Add user defined class to be tested l as part of file with Java main() class or l as a separate file within the same package. §Build the project and run it as a regular Java application Run > Run Main project (F6)
29
29 How to run unit tests? Part 2a §Select Java class to be tested (from Projects…) §Click the right mouse button and invoke Tools > Create Tests §Modify the generated text if necessary §Re-Build the project and run it as a JUnit test Run > Test Project(…) (Alt+F6) §Analyze the test results
30
30 How to run unit tests? OR (follow option 2b)
31
31 How to run unit tests? Part 2b §Add a new File to the project File > new File… §Select category: Unit Test §Select File Type: Test for Existing Class §You have to specify the class to be tested §You have to select JUnit version: 3 §The test class automatically generated §Modify the generated text if necessary §Re-Build the project and run it as a JUnit test Run > Test Project(…) (Alt+F6) §Analyze the test results
32
32 Demo Task §NetBeans project: SBJUnitTestClassLibrary
33
33 Demo Task §NetBeans project: SBJUnitDistance01
34
34 Practical Exercise Task §Expand project SBJUnitTestClassLibrary l Develop a class Power to implement arithmetic power operator with double base and integer exponent in two versions – iterative and recursive l Iterative method: double powi(double base, int n){ } l Recursive method: double powr(double base, int n){ } l Run the powx methods regular way l Run the powx methods using Junit Create PowerTest class Create testpowi() method and testpowr() method Run JUnit
35
35 Practical Exercise Task §Expand project SBJUnitDistance01 l Develop a class Counter to implement a counter as a general purpose programming component with a count data item and methods void incCount() and method void decCount() l Run the Counter class regular way l Run the Counter class methods using Junit Create CounterTest class Create testincCount() method and testdecCount() method Run JUnit
36
36 Questions? And/Or Thank You For Your Attention!
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.