46
CHAIR FOR SOFTWARE DESIGN AND QUALITY X =1.00 X =0.01 SD Software Design and Quality An Introduction into JUnit Vorlesung Programmieren Wintersemester 2016/17 Erik Burger | 8 February 2017 KIT – The Research University in the Helmholtz Association www.kit.edu

An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

CHAIR FOR SOFTWARE DESIGN AND QUALITY

X =1.00

X =0.01perf

lossSDSoftware Design and Quality

An Introduction into JUnitVorlesung Programmieren Wintersemester 2016/17Erik Burger | 8 February 2017

KIT – The Research University in the Helmholtz Association

www.kit.edu

Page 2: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Outline – Testing

1 Classification of Tests

2 Test-driven development1 Definition2 Refactoring

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 2/46

Page 3: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Outline – JUnit

3 Overview

4 Assertions

5 Fixtures1 Definition2 Example3 Parameterised Tests4 Test Suites

6 Eclipse Integration1 Test Runners2 Screenshot

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 3/46

Page 4: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Foreword

Program testing can be used to show the presence of bugs, butnever to show their absence!

Dijkstra 1972

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 4/46

Page 5: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Classification of Tests

Functional TestsCorrectness according to specification

Concurrency/Thread safeness

Non-FunctionalPerformance

Security

Usability

Interoperability

Reliability

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 5/46

Page 6: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Classification of Tests

Knowledgeblack-box tests

white-box tests

StructureUnit

Integration

System

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 6/46

Page 7: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Test-Driven Development

“Test-infected development” (Erich Gamma)As a developer, you can’t stop coding until everything works

Extreme Testing

Testing is more important than coding

Testing First

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 7/46

Page 8: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Test-Driven Development

JUnit: Failure JUnit: OK

1. add tests

2. fulfil tests

3. simplify/refactor code

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 8/46

Page 9: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Isolated Testing

Object oriented classes often have dependencies on other classes

A lot of classes cannot be tested independently

→ micro integration tests

Starting from a certain degree of dependencies, test effort risesdisproportionately high

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 9/46

Page 10: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Isolated Testing

Test represent typical usage scenarios

Less dependencies→ easier to useHigh degree of dependencies

Lack of modularisation?Bad design?Bad code dependency management

→ Refactoring

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 10/46

Page 11: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Refactoring

Keep your code simple – always

Refactor codeBefore testing – fulfil test with simple code

After testing – make code more simple

Without changing semantics you canDivide or merge classes

Move methods and attribute to other classes

Rename classes, methods, parameters, and variables

Extract or integrate methods

Replace inheritance by delegation and vice versa

Introduce interfaces

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 11/46

Page 12: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Challenges for Testing Large-ScaleSystems

Building test environments is time-consumingClass dependencies require instantiation of multiple objects that have to beconfigured

Tests slow down if system borders are crossedInteraction between database and middleware creates delays

Testing exceptional circumstances is non-trivialDifficult to reproduce system faults

→ Keep tests simple, fast and coherent

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 12/46

Page 13: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Bad smells

See [Fowler 2004]

Duplicated logicCopies are difficult to handle

Usually each copy start its own life

Leads to spread information

Hard to manage changes

Big classes and long methodsHinder mobility, localisation, usage, and documentation

Medium for duplicated code

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 13/46

Page 14: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Bad smells

Bad naming and non-fitting code-structuresIncrease effort for learning how the program works

Speculative generalisationElements of design formerly intended to make code flexible – but neverused

CommentsOften used as deodorant for bad smells

Needless after refactoringDo not mix up with comments used for

Design decisionsDocumentation of public interfaces (Javadoc)References

Classification of Tests Test-driven development

Erik Burger – An Introduction into JUnit 8 February 2017 14/46

Page 15: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

JUnit

3 Overview

4 Assertions

5 Fixtures

6 Eclipse Integration

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 15/46

Page 16: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

JUnit – Overview

JUnit is a framework for writing testsJUnit uses Java’s reflection capabilities (Java programs can examinetheir own code)JUnit helps the programmer:

define and execute tests and test suitesformalize requirements and clarify architecturewrite and debug codeintegrate code and always be ready to release a working version

JUnit is not included in Sun’s SDK, but almost all IDEs include it (e.g.,Eclipse)

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 16/46

Page 17: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

JUnit

HistoryJUnit was written by Erich Gamma (of Design Patterns) and Kent Beck(creator of XP methodology)

JUnit inspired various other unit testing frameworks for otherprogramming languages, like NUnit (.NET), CppUnit (C++)

JUnit is the de facto standard for test driven Java development

[Gamma et al. 1994]

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 17/46

Page 18: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

JUnit 3 vs JUnit 4

JUnit4JUnit4 was a complete redevelopment

includes ideas from other frameworks and uses features of Java 1.5

uses Java annotations (such as @Test)

This lecture is based on JUnit 4

Junit 5 is under devlopment for Java 8

Be carefulMany (web) tutorials are still based on JUnit 3

JUnit 4 is backwards compatible to version 3

JUnit 4 is much cleaner

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 18/46

Page 19: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Terminology

A test fixture sets up the data (both objects and primitives) that areneeded to run tests

Example: If you are testing code that updates an employee record, youneed an employee record to test it on

A unit test is a test of a single class

A test case tests the response of a single method to a particular set ofinputs

A test suite is a collection of test cases

A test runner is software that runs tests and reports resultsAn integration test is a test of how well classes work together

JUnit provides some limited support for integration tests

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 19/46

Page 20: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Structure

test fixture

test runner

test suite

another test case

test case (for one method)

unit test (for one class)

another test case

another test case

another test case

another unit test

another test case

test case (for one method)

unit test (for one class)

A unit test tests the methods in a singleclass

A test case tests (insofar as possible) asingle method

You can have multiple test cases for asingle method

A test suite combines unit tests

The test fixture provides softwaresupport for all this

The test runner runs unit tests or anentire test suite

Integration testing is not well supportedby JUnit

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 20/46

Page 21: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Test Case Verdicts

A verdict is the declared result of executing a single test.

Pass: the test case achieved its intended purpose, and the softwareunder test performed as expected.

Fail: the test case achieved its intended purpose, but the softwareunder test did not perform as expected.

Error: the test case did not achieve its intended purpose.Potential reasons:

An unexpected event occurred during the test case.The test case could not be set up properly

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 21/46

Page 22: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

What is a JUnit Test?

A test “script” is just a collection of Java methods.General idea is to create a few Java objects, do something interesting withthem, and then determine if the objects have the correct properties.

What is added? Assertions.A package of methods that checks for various properties:

“equality” of objectsidentical object referencesnull / non-null object references

The assertions are used to determine the test case verdict.

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 22/46

Page 23: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Organisation of JUnit Tests

Each method represents a single test case that can independentlyhave a verdict (Pass, Fail, Error).

Normally, all the tests for one Java class are grouped together into aseparate class.Naming convention:

Class to be tested: ValueClass containing tests: ValueTest

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 23/46

Page 24: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Writing a JUnit test class

Start by importing these JUnit 4 classes

import org.junit.*import static org.junit.Assert.*; // note static import

Declare your test class in the usual way

public class MyProgramTest {

}

Declare an instance of the class being tested

public class MyProgramTest {

MyProgram program;

int someVariable;

}

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 24/46

Page 25: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

A simple example

import org.junit.*;

import static org.junit.Assert.*;

public class ArithmeticTest {

@Test

public void testMultiply() {

assertEquals(4, Arithmetic.multiply(2, 2));

assertEquals(-15, Arithmetic.multiply(3, -5));

}

@Test

public void testIsPositive() {

assertTrue(Arithmetic.isPositive(5));

assertFalse(Arithmetic.isPositive(-5));

assertFalse(Arithmetic.isPositive(0));

}

}

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 25/46

Page 26: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Assertions

Assertions are defined in the JUnit class AssertIf an assertion is true, the method continues executing.

If any assertion is false, the method stops executing at that point, andthe result for the test case will be fail.

If any other exception is thrown during the method, the result for thetest case will be error.

If no assertions were violated for the entire method, the test case willpass.

All assertion methods are static methods.

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 26/46

Page 27: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Assertion Methods

Boolean conditions are true or falseassertTrue(condition)

assertFalse(condition)

Objects are null or non-nullassertNull(object)

assertNotNull(object)

Objects are identical or not identicali.e. two references to the same object assertSame(expected, actual)

assertNotSame(expected, actual)

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 27/46

Page 28: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Assertion Methods

“Equality” of objectsassertEquals(expected, actual)

valid if: expected.equals(actual)

“Equality” of arraysassertArrayEquals(expected, actual)

arrays must have same length

for each valid value for i, check as appropriate:

assertEquals(expected[i],actual[i])

assertArrayEquals(expected[i],actual[i])

There is also an unconditional failure assertion fail() that always results ina fail verdict.

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 28/46

Page 29: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Test Fixture

Test FixtureA test fixture is the context in which a test case runs.Typically, test fixtures include:

Objects or resources that are available for use by any test case.Activities required to make these objects available and/or resourceallocation and de-allocation: “setup” and “teardown”.

Allows multiple tests of the same or similar objects

Share fixture code for multiple tests

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 29/46

Page 30: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Before/After

@Before: Methods annotated with @Before are executed before everytest.

@After: Methods annotated with @After are executed after every test.

If there are e.g. 10 test, every @Before method is executed 10 times

More than one @Before or @After is allowed

Names of these methods are irrelevant, but must be public void

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 30/46

Page 31: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Fixture – Example

public class MoneyTest {

private Money f12CHF;

private Money f14CHF;

private Money f28USD;

@Before

public void setUp() {

f12CHF= new Money(12, "CHF");

f14CHF= new Money(14, "CHF");

f28USD= new Money(28, "USD");

}

}

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 31/46

Page 32: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Setup and Teardown

SetupUse the @Before annotation on a method containing code to run before eachtest case.

Teardown (regardless of the verdict)Use the @After annotation on a method containing code to run after eachtest case. These methods will run even if exceptions are thrown in the testcase or an assertion fails.

It is allowed to have any number of these annotationsAll methods annotated with @Before will be run before each test case, butthey may be run in any order.

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 32/46

Page 33: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

BeforeClass/AfterClass

@BeforeClass: executed once before a test suite

@AfterClass: executed once after a test suite

Only one @BeforeClass and @AfterClass allowed

Methods must be static

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 33/46

Page 34: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Fixture – Example

public class MoneyTest {

private static string currency;

@BeforeClass

public static void setGlobalCurrency() {

this.currency = "CHF";

}

@Before

public void setUp() {

m12= new Money(12, this.currency);

m14= new Money(14, this.currency);

}

}

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 34/46

Page 35: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Expected Exception

Exceptions that are expected on test executing

Annotation using @Test

@Test(expected=MyException.class)

If no exception is thrown, or an unexpected exception occurs, the testwill fail.

That is, reaching the end of the method with no exception will cause atest case failure.

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 35/46

Page 36: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Expected Exceptions – example

new ArrayList<Object>().get(0);

Should throw an IndexOutOfBoundsException

@Test(expected = IndexOutOfBoundsException.class)

public void empty() {

new ArrayList<Object>().get(0);

}

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 36/46

Page 37: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Ignore/Timeout

IgnoreTests annotated using @Ignore are not executed

Test runner reports that test was not run

@Ignore("Reason") allows to specify a reason why a test was not run

TimeoutTest allows to specify a timeout parameter

@Test(timeout=10) fails if the test takes more than 10 milliseconds

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 37/46

Page 38: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Parameterised Tests

MotivationIf you want a test to run with several parameter values, you’d have to

loop over a collection of values

which means if there was a failure, the loop wouldn’t terminate

write unique test cases for each test data combination

which could prove to be a lot of coding

Support in JUnitWith JUnit, you can create highly flexible testing scenarios easily

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 38/46

Page 39: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Parameterised Tests

Creating a parameterised test1 Create a generic test and decorate it with the @Test annotation2 Create a static feeder method that returns a Collection type and

decorate it with the @Parameters annotation3 Create class members for the parameter types required in the generic

method defined in Step 14 Create a constructor that takes these parameter types and

correspondingly links them to the class members defined in Step 35 Specify the test case be run with the Parameterized class via the

@RunWith annotation

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 39/46

Page 40: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Parameterised Test – Example@RunWith(Parameterized.class)

public class ParameterizedTest {

private int numberToTest;

private int rest;

public ParameterizedTest(Integer pValue, Integer rValue) {

numberToTest = pValue.intValue();

rest = rValue.intValue();

}

@Parameters

public static List<Integer[]> testValues() {

return Arrays.asList(new Integer[][] {

{1,1}, {3,1}, {6,0}, {7,1}, {9,1}

});

}

@Test

public void isOdd() {

assertTrue(numberToTest % 2 == rest);

}

}

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 40/46

Page 41: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Test Suites

Creating a test suiteTests can be combined to test suites

suites can contain other suites

useful for partitioning your test scenarios

well supported by Test Runners (see example)

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 41/46

Page 42: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Test Suite – Example

import org.junit.runner.RunWith;

import org.junit.runners.Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses({

MyTest1.class,

MyTest2.class,

MyTest3.class

}

)

public class AllTests {

}

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 42/46

Page 43: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Running JUnit Tests

The JUnit framework does not provide a graphical test runner. Instead,it provides an API that can be used by IDEs to run test cases and atextual runner than can be used from a command line.

Eclipse and Netbeans each provide a graphical test runner that isintegrated into their respective environments.

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 43/46

Page 44: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Test Runners

With the runner provided by JUnit:When a class is selected for execution, all the test case methods in theclass will be run.

The order in which the methods in the class are called (i.e. the order oftest case execution) is not predictable.

Other RunnersTest runners provided by IDEs may allow the user to select particularmethods, or to set the order of execution.

It is good practice to write tests with are independent of executionorder, and that are without dependencies on the state any previoustest(s).

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 44/46

Page 45: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

Eclipse TestRunner

EclipseJUnit included

GUI provided

easy re-running of tests

test history

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 45/46

Page 46: An Introduction into JUnitJUnit inspired various other unit testing frameworks for other programming languages, like NUnit (.NET), CppUnit (C++) JUnit is the de facto standard for

References

E.W. Dijkstra. “Notes on Structured Programming”. In: Structuredprogramming. Ed. by O. J. Dahl, E. W. Dijkstra, and C. A. R. Hoare.London, UK: Academic Press Ltd., 1972. ISBN: 0-12-200550-3.

Martin Fowler. Refactoring : improving the design of existing code.13. print. Addison-Wesley object technology series. Boston:Addison-Wesley, 2004. ISBN: 0-201-48567-2.

E. Gamma et al. Design Patterns: Elements of ReusableObject-Oriented Software (Adobe Reader). Pearson Education, 1994.ISBN: 9780321700698.

Frank Westphal. Testgetriebene Entwicklung – mit JUnit & FIT : wieSoftware änderbar bleibt. 1. Heidelberg: dpunkt-Verlag, 2006. ISBN:3-89864-220-8.

Overview Assertions Fixtures Eclipse Integration References

Erik Burger – An Introduction into JUnit 8 February 2017 46/46