如何对此字符串反向代码使用参数化的Junit测试

时间:2016-08-28 21:21:59

标签: java junit parameterized

我在某处读到了我可以使用@RunWith(JUnitParamsRunner.class),但我不知道如何使用它来测试我的字符串反向方法:

这是我的班级:

public class StringReverse {

    public static String reverse(String s){
        List<String> tempArray = new ArrayList<String>(s.length());
        for(int i = 0; i <s.length(); i++){
            tempArray.add(s.substring(i, i+1));
        }
        StringBuilder reverseString = new StringBuilder(s.length());
        for(int i = tempArray.size() - 1; i >=0; i--){
            reverseString.append(tempArray.get(i));
        }
        return reverseString.toString();
    }

}

这是我的测试类:

public class StringReverTest {

    @Test
    public void test() {
        StringReverse s = new StringReverse();
        assertEquals("cba", s.reverse("abc"));
        assertEquals("", s.reverse(""));
        assertNotEquals("abc", s.reverse("abc"));

    }
    @Test(expected = NullPointerException.class)
    public void testThrowNPE(){
        StringReverse s = new StringReverse();
        s.reverse(null);
        throw new NullPointerException();
    }

}

有人可以说明我如何使用参数化测试来测试上述内容吗?

由于

1 个答案:

答案 0 :(得分:3)

你可以用这个替换你的第一个测试:

@Test
@Parameters(method = "reverseValues")
public void reverseString(String input, String output) {
    StringReverse s = new StringReverse();
    assertEquals(output, s.reverse(input));
}

private Object[] reverseValues() {
     return new Object[]{
             new Object[]{"abc", "cba"},
             new Object[]{"", ""}
        };
}

第二项测试不需要throw new NullPointerException()行:

@Test(expected = NullPointerException.class)
public void testThrowNPE(){
    StringReverse s = new StringReverse();
    s.reverse(null);
}

预期的注释将验证s.reverse(null)是否会引发NullPointerException