Dynamic tests with JUnit 3

Sometime it is very useful to create tests dynamically. For instance, I had to test that every URL returned by a method is valid and the content can be downloaded. In this case I don't know how many URL the method was returning, and I wanted to have a separate and independent test for every URL so that I can catch all the errors in a single run. If you create a single test with a loop, the first failure will stops the other tests to run. This approach worked fine: I caught 5 type of errors in over 2000 tests running on that method (one per url), some url was returning http status 404, some 500, 403, etc... everything documented in a test report, and promptly reported in the bug tracker.

This example, on the usual Adder, is about how to dynamically create tests:

 1public class TestAdd extends TestCase {
 2    private Adder adder;
 3    private long expected;
 4
 5    public TestAdd(int a, int b, long expected) {
 6        super("test" + a + "addedTo" + b + "equals" + expected);
 7        this.adder = new Adder(a, b);        
 8        this.expected = expected;
 9    }
10    
11    protected void runTest() throws Throwable {
12        assertEquals(expected, adder.sum());
13    }
14    
15    public static Test suite() {
16        TestSuite suite = new TestSuite(TestAdd.class.getName());        
17        Random r = new Random();
18        for(int i = 0; i < 10; i++) {
19            int a = r.nextInt(100);
20            int b = r.nextInt(100);
21            long expected = a + b;
22            suite.addTest(new TestAdd(a, b, expected));
23        }
24        return suite;
25    }
26}

I don't know if this can be so easily done with JUnit4 and annotations. I still prefer JUnit 3, I think it's much easier.


4 Responses to “Dynamic tests with JUnit 3”  

  1. 1 coffy_time

    This test did not run. Do you have a working example?

  2. 2 Luigi

    It does run. What problem are you finding?

  3. 3 A.Sokolowski

    Works great. Very useful, thanks!

  4. 4 Luigi

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>



Calendar

November 2008
M T W T F S S
« Oct   Dec »
 12
3456789
10111213141516
17181920212223
24252627282930

Follow me

twitter flickr LinkedIn feed

Subscribe by email

Enter your email address:

Archives


Categories

Tag Cloud


Listening