20.2 Junit Parameterized Test
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.Arrays;
import java.util.Collection;
import java.util.Random;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class NumbertoWordsConverterTest {
private int input;
private String expected;
private Random random = new Random();
@Parameters
public static Collection<Object[]> parameters() {
Object[][] data = new Object[][] { { 1, "one" }, { 0, "zero" },
{ 7, "seven" }, { 11, "eleven" }, { 12, "twelve" },
{ -2, "minus two" }, { 17, "seventeen" }, { 20, "twenty" } };
return Arrays.asList(data);
}
public NumbertoWordsConverterTest(int input, String expected) {
this.input = input;
this.expected = expected;
}
@Test
public void testConvert() {
assertThat(new NumbertoWordsConverter().convert(input),
is(equalTo(expected)));
}
@Test(expected = IllegalArgumentException.class)
public void testOutOfRange() {
int testNumber = random.nextInt();
while (Math.abs(testNumber) <= 20) {
testNumber = random.nextInt();
}
new NumbertoWordsConverter().convert(testNumber);
}
}