in

 

Bytes of Wisdom

Nested classes with JUnit

Recently I was playing with JUnit 4.X.  I wanted to be able to define tests in nested classes as I had before with NUnit.  This was to facilitate BDD-ish test definitions, where I break up unit tests by test context.

My first attempt failed (of course) because JUnit was unable to see the nested classes and the failed to run.  After a bit of digging, I ran across a sparsely documented feature that allowed me to do what I wanted. 

Namely by using: @RunWith(Enclosed.class)

Below is an example, hope it's of use:

package junitSampleTests; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Enclosed; import junitSample.*; @RunWith(Enclosed.class) public class SimpleFractionTest { public static class WhenConstructingSimpleFractions { protected SimpleFraction f1, f2; @Before public void setUp() throws Exception { f1 = new SimpleFraction(15, 25); f2 = new SimpleFraction(-27, 6); } @Test(expected=InvalidOperationException.class) public void shouldNotAllowZeroForDenominator() throws Exception { f1 = new SimpleFraction(1, 0); } @Test public void shouldEnsureOnlyTheNumeratorHoldsTheFractionSign() throws Exception { f1 = new SimpleFraction(1, -1); assertEquals(-1, f1.getNumerator()); assertEquals(1, f1.getDenominator()); } } public static class WhenUtilizingAccessors { protected SimpleFraction f1, f2; @Before public void setUp() throws Exception { f1 = new SimpleFraction(15, 25); f2 = new SimpleFraction(-27, 6); } @Test public void shouldGetNumerator() { assertEquals(15, f1.getNumerator()); assertEquals(-27, f2.getNumerator()); } @Test public void shouldGetDenominator() { int result = f1.getDenominator(); assertTrue("getDenominator() returned " + result + " instead of 25.", result == 25); result = f2.getDenominator(); assertEquals(6, result); } } public static class WhenSimplifying { protected SimpleFraction f1, f2; @Before public void setUp() throws Exception { f1 = new SimpleFraction(15, 25); f2 = new SimpleFraction(-27, 6); } @Test public void shouldSimplify() { f1.simplify(); assertEquals(3, f1.getNumerator()); assertEquals(5, f1.getDenominator()); } @Test public void shouldSimplifyWhenNoSimplificationIsPossible() throws Exception { f1 = new SimpleFraction(15, 29); f1.simplify(); assertEquals(15, f1.getNumerator()); assertEquals(29, f1.getDenominator()); } @Test public void shouldSimplifyNegativeFractions() { f2.simplify(); assertEquals(-9, f2.getNumerator()); assertEquals(2, f2.getDenominator()); } @Test public void shouldSimplifyWhenNumeratorIsZero() throws Exception { f1 = new SimpleFraction(0, 29); f1.simplify(); assertEquals(0, f1.getNumerator()); assertEquals(29, f1.getDenominator()); } } }
Published Apr 28 2008, 09:56 AM by jlockwood
Filed under: , ,

Comments

No Comments

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add

About jlockwood

I code stuff and people pay me for it.
Copyright Los Techies 2007. All rights reserved.
Powered by Community Server (Commercial Edition), by Telligent Systems