junit - files.meetup.comfiles.meetup.com/1566558/2013-05 junit.pdf · junit status release date...

31
JUnit The Other Stuff Charles Sharp, OCI May 9, 2013 Thursday, June 6, 13

Upload: others

Post on 26-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

JUnitThe Other Stuff

Charles Sharp, OCIMay 9, 2013

Thursday, June 6, 13

Page 2: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Yay! An Ad!Java Testing with JUnit

www.ociweb.com/training/Java-Testing-with-JUnit

July 9 - July 18T/Th, 5:30 – 8:30

Mention the JUG and get 10% off!

Thursday, June 6, 13

Page 3: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

 

JUnit StatusRelease Date4.11 Nov 14, 20124.10 Sep 29, 20124.9 Aug 22, 20114.8 Nov 30, 20094.7 Jul 27, 20094.6 Apr 13, 20094.5 Aug 8, 20084.4 Jul 19, 20074.3 Mar 20, 20074.2 Nov 16, 20064.1 May 2, 20064.0 Feb 16, 20063.8.2 Mar 3, 20063.8.1 Sep 4, 2002

Thursday, June 6, 13

Page 4: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

JUnit Annotations• @Before

• @BeforeClass

• @After

• @AfterClass

• @Ignore

• @Test

• @Test(timeout=500)

• @Test(expected=<Exception>.class)

Thursday, June 6, 13

Page 5: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Everyone Uses • @Before fka setUp()

• @After fka tearDown()

• @Test fka test<something>()

Thursday, June 6, 13

Page 6: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Some Use• @BeforeClass

• @AfterClass

Thursday, June 6, 13

Page 7: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Quiz!

Thursday, June 6, 13

Page 8: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Tonight• Assumptions

• Categories

• Parameterized Testing

• Parameter

• Theory

• Rules

• Hamcrest Matchers

Thursday, June 6, 13

Page 9: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Everyone Uses Asserts• assertEquals(...) / assertArrayEquals(...)

• assertNull(...) / assertNonNull(...)

• assertSame(...) / assertNotSame(...)

• assertTrue(...) / assertFalse(...)

• fail(“Not implemented yet.”);

Thursday, June 6, 13

Page 10: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Not a whole lot of folk useassertThat([java.lang.string Reason],

T actual, org.hamcrest.matcher<T> matcher)

(more on Hamcrest in just a bit)

Thursday, June 6, 13

Page 11: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Hardly anyone uses • Assume:

• assumeNoException(...)

• assumeNotNull (...)

• assumeThat(...) // used a lot in @Theory

• assumeTrue(...)

Unlike Asserts, if an assumption is wrong, the test is halted and ignored.

Thursday, June 6, 13

Page 12: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

@Category

• Canonical example is fast and slow

• Browser: Firefox, Chrome, Opera, others

• Database: DB2, Oracle, &c...

Gives the ability to group tests.- exclude a group- include a group

Thursday, June 6, 13

Page 13: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Category Example

Thursday, June 6, 13

Page 14: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Parameterized Testing

• @RunWith(Parameters.class)

• @RunWith(Theory.class)

Thursday, June 6, 13

Page 15: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Parameter.class• Pros:

• Quick to write

• No need to establish relationships

• Cons:

• Must detail all data

Thursday, June 6, 13

Page 16: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Parameter.class• Static Method to Generate Test

Data

• Single Constructor that stores test data

• Test(s)

Thursday, June 6, 13

Page 17: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Parameterized Example

Thursday, June 6, 13

Page 18: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Theory.class• Cons:

• Not (typically) quick to write

• Must understand data relationships

• Pros?:

• Don’t need to detail all data

Thursday, June 6, 13

Page 19: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Theory.class

• Method to generate and return test data

• Theory(s)

Thursday, June 6, 13

Page 20: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Theory Example

Thursday, June 6, 13

Page 21: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Rules• Add information to test results.

• Access information about a test before it is run

• Modify a test before running it.

• Modify test results.

Thursday, June 6, 13

Page 22: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Rules Examples

Thursday, June 6, 13

Page 23: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Hamcrest

What an odd name...

Thursday, June 6, 13

Page 24: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Matchers

or not.

Thursday, June 6, 13

Page 25: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Hamcrest Matchers• hamcrest.org (/JavaHamcrest/javadoc/1.3/)

• General purpose matching library for Java, Python, Ruby, Objective-C, PHP, and Erlang (What? No Haskell?)

• Provides readability

• code

• error messages

Thursday, June 6, 13

Page 27: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Matcher Types• General Purpose:

is(T), not(T), any(T), isIn(T), instanceOf(Class)

• Strings:

startsWith(S), endsWith(S)equalToIgnoringCase(S), equalToIgnoringWhiteSpace(S)isEmptyString(), isEmptyOrNullString()

Thursday, June 6, 13

Page 28: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

More matchers• Iterables:

contains(E ...) // (oh, boy, howdy...)

containsInAnyOrder(T ...)

hasItem(T) // Yay!

hasItems(T ...)

Thursday, June 6, 13

Page 29: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

And more...• Collections:

hasSize(int)

empty()

emptyCollectionOf(Class<E>)

Thursday, June 6, 13

Page 30: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

And many more...• Arrays

• Comparable

• Classes

• DOM

• Maps

• Numbers

Thursday, June 6, 13

Page 31: JUnit - files.meetup.comfiles.meetup.com/1566558/2013-05 JUnit.pdf · JUnit Status Release Date 4.11 Nov 14, 2012 4.10 Sep 29, 2012 4.9 Aug 22, 2011 4.8 Nov 30, 2009 4.7 Jul 27, 2009

Tonight• Assumptions

• Categories

• Parameterized Testing

• Parameter

• Theory

• Rules

• Hamcrest Matchers

Thursday, June 6, 13