Lesson 7 unit testing junit aubg icoscis team assoc prof stoyan bonev
This presentation is the property of its rightful owner.
Sponsored Links
1 / 36

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


  • 79 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


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


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

March, 23 - 24, 2013 SWU, Blagoevgrad


Lesson Contents:

  • Unit Testing

  • Introduction to JUnit

  • JUnit within/under NetBeans


Unit Testing

4


Acceptance testing

User needs

Requirement

specification

System testing

Design

Integration testing

Code

Unit testing

Categories of Testing

5


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


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


JUnit– An Introduction -

8


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


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


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


Design of JUnit

  • Image Courtesy: JUnit: A Cook’s Tour

Impetus Confidential


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


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


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


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


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


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


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


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


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,

    junit.textui.TestRunner.run(AllTests.class);

  • Graphical Runner

    >> java junit.swingui.TestRunnerAllTests

    or,

    junit.swingui.TestRunner.run(AllTests.class);

  • IDE like Eclipse, NetBeans “Run as JUnit”

Impetus Confidential


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


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


JUnit– within/under NetBeans -

  • .

24

Impetus Confidential


JUnit within/under NetBeans

  • Practical Manual:

  • Practical conventions

  • How to build unit tests?

  • How to run unit tests?

  • Demo task

  • Practical exercise task


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


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


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)


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


How to run unit tests?

OR

(follow option 2b)

30


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


Demo Task

  • NetBeans project: SBJUnitTestClassLibrary


Demo Task

  • NetBeans project: SBJUnitDistance01


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


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


Questions? And/Or

Thank You

For

Your Attention!


  • Login