Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev March, 23 - 24, 2013 SWU, Blagoevgrad.

Similar presentations


Presentation on theme: "Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev March, 23 - 24, 2013 SWU, Blagoevgrad."— Presentation transcript:

1

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!


Download ppt "Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev March, 23 - 24, 2013 SWU, Blagoevgrad."

Similar presentations


Ads by Google