Repeatedly Testing the Same Method
Problem
You want to test a method with a wide range of input data. You are not sure if you should write a different test for each combination of input data, or one huge test that checks every possible combination.
Solution
Write a suite( ) method that iterates through all of your
input data, creating a unique instance of your test case for each
unique input. The data is passed to the test cases through the
constructor, which stores the data in instance fields so it is
available to the test methods.
Discussion
You often want to test some piece of functionality with many different combinations of input data. Your first impulse might be to write a different test method for each possible combination of data; however, this is tedious and results in a lot of mundane coding. A second option is to write a single, big test method that checks every possible combination of input data. For example:
public void testSomething( ) {
Foo foo = new Foo( );
// test every possible combination of input data
assertTrue(foo.doSomething(false, false, false);
assertFalse(foo.doSomething(false, false, true);
assertFalse(foo.doSomething(false, true, false);
assertTrue(foo.doSomething(false, true, true);
...etc
}This approach suffers from a fatal flaw. The problem is that the test stops executing as soon as the first assertion fails, so you won’t see all of the errors at once. Ideally, you want to easily set up a large number of test cases and run them all as independent tests. ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access