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


  • 77 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 7 unit testing junit aubg icoscis team assoc prof stoyan bonev

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


Lesson 7 unit testing junit aubg icoscis team assoc prof stoyan bonev1

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

March, 23 - 24, 2013 SWU, Blagoevgrad


Lesson contents

Lesson Contents:

  • Unit Testing

  • Introduction to JUnit

  • JUnit within/under NetBeans


Unit testing

Unit Testing

4


Lesson 7 unit testing junit aubg icoscis team assoc prof stoyan bonev

Acceptance testing

User needs

Requirement

specification

System testing

Design

Integration testing

Code

Unit testing

Categories of Testing

5


Unit testing1

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

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

JUnit– An Introduction -

8


Junit an introduction1

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

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

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 junit1

Design of JUnit

  • Image Courtesy: JUnit: A Cook’s Tour

Impetus Confidential


Write a test case

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 case1

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 case2

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

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

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 case3

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 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

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 tests1

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

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

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

JUnit– within/under NetBeans -

  • .

24

Impetus Confidential


Junit within under netbeans1

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

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 conventions1

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

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

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 tests1

How to run unit tests?

OR

(follow option 2b)

30


How to run unit tests2

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

Demo Task

  • NetBeans project: SBJUnitTestClassLibrary


Demo task1

Demo Task

  • NetBeans project: SBJUnitDistance01


Practical exercise task

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 task1

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

Questions? And/Or

Thank You

For

Your Attention!


  • Login