lesson 7 unit testing junit aubg icoscis team assoc prof stoyan bonev n.
Skip this Video
Loading SlideShow in 5 Seconds..
Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev PowerPoint Presentation
Download Presentation
Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev

Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev

127 Views Download Presentation
Download Presentation

Lesson 7 Unit Testing /JUnit/ AUBG ICoSCIS Team Assoc. Prof. Stoyan Bonev

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Lesson 7Unit Testing /JUnit/AUBG ICoSCIS TeamAssoc. Prof. Stoyan Bonev

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

  3. Lesson Contents: • Unit Testing • Introduction to JUnit • JUnit within/under NetBeans

  4. Unit Testing 4

  5. Acceptance testing User needs Requirement specification System testing Design Integration testing Code Unit testing Categories of Testing 5

  6. 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 Testing 6

  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. 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.  Impetus Confidential

  11. Design of JUnit • 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 TestCaseor TestSuite. This behavior helps you create hierarchal tests with depth control. Impetus Confidential

  12. Design of JUnit • Image Courtesy: JUnit: A Cook’s Tour Impetus Confidential

  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 } Impetus Confidential

  14. Write a test case 14 • 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 } 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 } 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) 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. Impetus Confidential

  18. Write a test case public class CalculatorTest extends TestCase { // initialize protected void setUp()... Spublic 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 Din any order. Impetus Confidential

  19. Write a test suite Write a class with a static method suite() that creates a junit.framework.TestSuitecontaining all the Tests. public class AllTests { public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(<test-1>.class); suite.addTestSuite(<test-2>.class); return suite; } } 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. 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.TestRunnerAllTests or,; • Graphical Runner >> java junit.swingui.TestRunnerAllTests or,; • IDE like Eclipse, NetBeans “Run as JUnit” 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. Impetus Confidential

  23. How to approach? • 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. Impetus Confidential

  24. JUnit– within/under NetBeans - • . 24 Impetus Confidential

  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. 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. 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. How to build unit tests? Part 1 • Create New project • Add Java class with main() method • Add user defined class to be tested • as part of file with Java main() class or • 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. 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. How to run unit tests? OR (follow option 2b) 30

  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 31

  32. Demo Task • NetBeans project: SBJUnitTestClassLibrary

  33. Demo Task • NetBeans project: SBJUnitDistance01

  34. Practical Exercise Task • Expand project SBJUnitTestClassLibrary • Develop a class Power to implement arithmetic power operator with double base and integer exponent in two versions – iterative and recursive • Iterative method: double powi(double base, int n){ } • Recursive method: double powr(double base, int n){ } • Run the powx methods regular way • Run the powx methods using Junit • Create PowerTest class • Create testpowi() method and testpowr() method • Run JUnit

  35. Practical Exercise Task • Expand project SBJUnitDistance01 • 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() • Run the Counter class regular way • Run the Counter class methods using Junit • Create CounterTest class • Create testincCount() method and testdecCount() method • Run JUnit

  36. Questions? And/Or Thank You For Your Attention!