Junit测试案例

时间:2012-02-23 19:12:28

标签: java junit

您好我是编写JUnit测试用例的新手。有人能用这种方法帮助我吗?

private boolean validateDate(Date date, String datesInCsv) {
        boolean dateAlreadyExist= false;
        final String[] dateVal = datesInCsv.split(",");
        List<Date> allDates = new ArrayList<Date>();


        for (final String stringDate : dateVal ) {
            allDates .add(DateUtil.parseDate(stringDate ,"MM/dd/yyyy"));
        }
        if (allDates .contains(date)) {
            dateAlreadyExist= true;
        }
        return dateAlreadyExist;
    }

在为这些方法编写测试用例之前,如何开始以及应该记住什么?

3 个答案:

答案 0 :(得分:1)

测试纯粹主义者会通过开始测试而不是实现来回答“如何开始”。但是,当你拥有自己的方法时,你已经超越了这一点。

cjstheno是正确的,测试私有方法是,嗯,奇怪。

所以我通常从不良输入的测试开始

@Test(expected = IllegalArgumentException.class)
public void nullDateIsBadInput() {
    yourclass.validateDate(null, "01/01/2000");
}

然后我测试了方法的主要推力

@Test
public void janFirstIsInInput() {
    Assert.assertTrue("janFirst is in inuputs", 
        yourclass.validateDate(janFirst, "01/01/2000, 01/02/2000");
}

@Test
public void janFirstIsNotInInput() {
    Assert.assertFalse("janFirst is not in inputs", 
        yourclass.validateDate(janFirst, "04/01/2000, 01/02/2000");
}

不要忘记将可选消息放入断言调用中,以后再回到代码时会更容易。

最后,一旦你进行了测试工作,最后不要忘记重构你的代码(以及你的测试!),例如返回allDates .contains(date)的值,而不是将其存储在冗余变量中。

答案 1 :(得分:0)

通常,您不直接测试私有方法,但通过测试调用它的方法可以获得测试覆盖率。没有什么可以说你无法测试它。

您需要使用反射(或Groovy)来测试它,因为它是私有的。

就测试内容而言,您将需要测试null和其他意外输入值以及任何边界条件(非常大的日期,非常小,等等)。在您的情况下,您可能还想检查意外的日期格式。

Junit网站(以及junit google或Stackoverflow搜索)可以为您提供有关单元测试的更多想法。

希望这有点帮助。

答案 2 :(得分:0)

从@Paul开始,不要忘记测试迭代周围的边界。由于datesInCsv可以是多个日期,因此请测试空String,表示单个日期的String和表示多个日期的String。

然后对可疑输入有所期望,这可以回到您的要求。这包括字符串中开头,结尾或中间日期的空格。尾随逗号怎么样?这些可疑的东西作为测试非常重要,因为它们可以作为未来开发人员的需求文档形式,这些开发人员可能会在以后进入并希望“优化”事物。请记住,测试的目标不仅仅是确保事情在今天起作用,而且还以可执行的形式保留这些期望,以确保它们明天也是如此。