您好我是编写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;
}
在为这些方法编写测试用例之前,如何开始以及应该记住什么?
答案 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。
然后对可疑输入有所期望,这可以回到您的要求。这包括字符串中开头,结尾或中间日期的空格。尾随逗号怎么样?这些可疑的东西作为测试非常重要,因为它们可以作为未来开发人员的需求文档形式,这些开发人员可能会在以后进入并希望“优化”事物。请记住,测试的目标不仅仅是确保事情在今天起作用,而且还以可执行的形式保留这些期望,以确保它们明天也是如此。