JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A...

26
JUnit Tutorial Hong Qing Yu Nov 2005

Transcript of JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A...

Page 1: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

JUnit Tutorial

Hong Qing Yu

Nov 2005

Page 2: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

2

JUnit Tutorial

The testing problemsThe framework of JUnitA case studyJUnit toolPractices

Page 3: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

3

The Testing Problems

programmers

Should write

few

Do

Why?

I am so busy

It is difficult

Page 4: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

4

The Testing Problems

Programmers need such kind of tool:

“Writing a few lines of code, then a test that should run, or even better, to write a test that won't run, then write the code that will make it run.”

JUnit is that kind of tool!

Page 5: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

5

JUnit Tutorial

The testing problems The framework of JUnitA case studyJUnit toolPractices

Page 6: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

6

The Framework of JUnit

Page 7: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

7

JUnit Tutorial

The testing problemsThe framework of JUnitA case studyJUnit toolPractices

Page 8: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

8

A Case Study

class Money {    

private int fAmount;     private String fCurrency;   

public Money(int amount, String currency) {   fAmount= amount;         fCurrency= currency;     }

public int amount() {         return fAmount;     }     public String currency() {         return fCurrency;     }

public Money add(Money m) {     return new Money(amount()+m.amount(), currency()); }

}

Page 9: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

9

How to Write A TestCasepublic class MoneyTest extends TestCase {     //…     public void testSimpleAdd() {        

Money m12CHF= new Money(12, "CHF");  // (1)        

Money m14CHF= new Money(14, "CHF");                 Money expected= new Money(26, "CHF");         Money result= m12CHF.add(m14CHF);    // (2)         Assert.assertTrue(expected.equals(result));     // (3)     } }

(1) Creates the objects we will interact with during the test. This testing context is commonly referred to as a test's fixture. All we need for the testSimpleAdd test are some Money objects.

(2) Exercises the objects in the fixture. (3) Verifies the result

Page 10: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

10

Assert assertEquals(expected, actual) assertEquals(message, expected, actual) assertEquals(expected, actual, delta) assertEquals(message, expected, actual, delta) assertFalse(condition) assertFalse(message, condition) Assert(Not)Null(object) Assert(Not)Null(message, object) Assert(Not)Same(expected, actual) Assert(Not)Same(message, expected, actual) assertTrue(condition) assertTrue(message, condition)

Page 11: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

11

Structure

setUp() Storing the fixture's objects in instance variables of your

TestCase subclass and initialize them by overriding the setUp method

tearDown() Releasing the fixture’s

run() Defining how to run an individual test case. Defining how to run a test suite.

testCase()

Page 12: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

12

Structure of Writing A Test public class MoneyTest extends TestCase {     private Money f12CHF;     private Money f14CHF;        protected void setUp() {         f12CHF= new Money(12, "CHF");         f14CHF= new Money(14, "CHF");     } public void testSimpleAdd() {     Money expected= new Money(26, "CHF");     Money result= f12CHF.add(f14CHF);     Assert.assertTrue(expected.equals(result)); }

TestCase test= new MoneyTest("simple add") {     public void runTest() {         testSimpleAdd();     } }}

Page 13: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

13

Design Test Cases

The real world scenarios The number boundaries

Smaller than 0 such as –1, -2, …, -100, …

0

Bigger than 0 such as 1, 2, …, 100…

Page 14: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

14

The Feedback to Code

class Money {    

private int fAmount;     private String fCurrency;   

public Money(int amount, String currency) {   fAmount= amount;         fCurrency= currency;     }

public int amount() {         return fAmount;     }     public String currency() {         return fCurrency;     }

public Money add(Money m) { if (m.amount()<=0) throw exception;     return new Money(amount()+m.amount(), currency()); }}

Page 15: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

15

Test Case and Test Suite

TestCase test= new MoneyTest("simple add"){     public void runTest() {         testSimpleAdd();     } }

public static Test suite() {     TestSuite suite= new TestSuite();     suite.addTest(new MoneyTest("testEquals"));     suite.addTest(new MoneyTest("testSimpleAdd"));     return suite; }

Page 16: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

16

Static and Dynamic Run JUnit supports two ways of running single tests: 1. static 2. dynamic

TestCase test= new MoneyTest("simple add"){     public void runTest() {         testSimpleAdd();     } }

TestCase test= new MoneyTest("testSimpleAdd");

Since JUnit 2.0 there is an even simpler dynamic way. You only pass the class with the tests to a TestSuite and it extracts the test methods automatically.

public static Test suite() { return new TestSuite(MoneyTest.class); }

Page 17: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

17

JUnit Tutorial

The testing problemsThe framework of JUnitA case studyJUnit toolPractices

Page 18: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

18

JUnit

Page 19: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

19

JUnit for Eclipse

Page 20: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

20

Start to Use it

1. Download the latest version of JUnit from http://download.sourceforge.net/junit/2. Installation unzip the junit.zip file add junit.jar to the CLASSPATH. For example: set classpath=%classpath

%;INSTALL_DIR\junit3\junit.jar 3. Testing Test the installation by using either the batch or the graphical TestRunner tool to run the

tests that come with this release. All the tests should pass OK.

for the batch TestRunner type:     java junit.textui.TestRunner junit.samples.AllTests

for the graphical TestRunner type:     java junit.awtui.TestRunner junit.samples.AllTests

for the Swing based graphical TestRunner type:     java junit.swingui.TestRunner junit.samples.AllTests

Notice: The tests are not contained in the junit.jar but in the installation directory directly. Therefore make sure that the installation directory is on the class path

Important: Don't install the junit.jar into the extension directory of your JDK installation.If you do so the test class on the files system will not be found. JUnit plug-in for Eclipse

Page 21: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

21

Eclipse plug-in

http://dev.eclipse.org/viewcvs/index.cgi/jdt-ui-home/plugins/org.eclipse.jdt.junit/org.eclipse.pde.junit_3.0.0.zip

Page 22: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

22

The testing problemsThe framework of JUnitA case studyJUnit toolPractices

Page 23: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

23

Practices

BankAccount case study

Page 24: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

24

More Reading

http://www.junit.org/index.htm http://open.ncsu.edu/se/tutorials/junit/ http://www.cs.umanitoba.ca/~eclipse/10-

JUnit.pdf http://supportweb.cs.bham.ac.uk/

documentation/tutorials/docsystem/build/tutorials/junit/junit.pdf

http://junit.sourceforge.net/javadoc/junit/framework/

Page 25: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

25

Contact information

[email protected]

Today’s slides can be find at

http://www.cs.le.ac.uk/people/hqy1/JUnit%20Tutorial.ppt

Page 26: JUnit Tutorial Hong Qing Yu Nov 2005. 2 JUnit Tutorial The testing problems The framework of JUnit A case study JUnit tool Practices.

26

Thanks And Questions