我是否需要测试类中的测试方法

时间:2017-03-31 14:14:33

标签: java testing methods junit

所以我有一个示例方法,我给他一天,它返回我一周的第一天和最后一天:

public static final DatePeriod thisWeek(LocalDate date) {

    TemporalField dayOfWeek = WeekFields.of(Locale.FRANCE).dayOfWeek();
    LocalDate mon = date.with(dayOfWeek, 1);
    LocalDate sun = date.with(dayOfWeek, 7);

    return new DatePeriod(mon, sun);
}

我必须写一个JUnit测试(我做了):

@Test
public void testThisMonth_LocalDate() throws ParseException {
    System.out.println("thisMonth");
    for (String[] date : VALID_TEST_DATES) {
        LocalDate dateLocal = dateToLocal(date[0]);
        DatePeriod expResult = new DatePeriod(dateToLocal(date[5]), dateToLocal(date[6]));
        DatePeriod result = JavaTimeUtils.thisMonth(dateLocal);
        assertEquals(expResult.getLeft(), result.getLeft());
        assertEquals(expResult.getRight(), result.getRight());
    }
}

所以,因为我多次使用 dateToLocal()中的代码,所以我决定用这样的方法制作代码:

public LocalDate dateToLocal(String dateString) throws ParseException {   // Calendar to LocalDate
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    Calendar cal = Calendar.getInstance();
    Date initDate = df.parse(dateString);
    cal.setTime(initDate);
    LocalDate dateLocal = LocalDate.of(cal.get(Calendar.YEAR), Month.of(cal.get(Calendar.MONTH)+1), cal.get(Calendar.DAY_OF_MONTH));

    return dateLocal;
}

它有效。 但这不是我的问题。 我想知道这是正确的方法做这样的事情(这个JUnit测试中的方法),我是否需要为这个方法进行测试,我是否必须在其他类中移动它(在测试)?我知道这是一个奇怪的问题,我已经在谷歌搜索,但未成功。 (也许我不能问谷歌吧)。 谢谢:))

5 个答案:

答案 0 :(得分:3)

没有绝对的方法可以做某事,一切都取决于项目。

这个主题对每个人的主观性开放。

IMO,如果您在单个测试类中多次使用代码块,则应使用本地方法提取该块。

如果在多个测试方法中使用它,则应该查看继承或在测试包下创建一个小的util类。

如果你的主java代码中也需要这个方法,那么你应该为它编写单元测试。测试的目的是验证您运行时代码。 JUnit代码在运行前运行。

答案 1 :(得分:2)

您不需要测试测试方法(正如其他人指出的那样)。但是,我建议将预期结果存储为LocalDate实例,而不是从字符串中动态创建它们。这样您就可以避免转换代码中的错误。

答案 2 :(得分:1)

不,写测试"测试测试"是个不错的主意。我在很多公司工作,无处可去。你写的就足够了。

答案 3 :(得分:1)

在测试类中使用辅助方法是完全可以接受的。事实上,在测试任何大复杂性的东西时,很难不这样做。除非测试帮助器方法在多个项目中的多个测试中使用的实用程序类中(因此在不同项目的主jar中),我通常认为编写测试帮助程序方法的测试是有用的(否则,采取根据逻辑结论,几乎不可能有任何代码重用和完全测试的类。)

答案 4 :(得分:1)

我说测试代码和生产代码的规则相似:

  • 如果在类中多次使用代码模式,请将其提取到方法
  • 如果您在同一个包中的多个类中使用它,请将该方法移至具有包级别可见性的实用程序类
  • 如果您在多个包中使用它,请将实用程序类移动到专用实用程序包,将其公开
  • 如果您在多个项目中使用该代码,请将其移至特定于团队的库
  • 如果您发现整个组织需要重复使用此功能,请将其移至全局库
  • 如果你发现全世界都需要它,那就开源吧

基本上:根据需要使代码可见,但不能更多

是的,如果您将代码提取到实用程序类(第2个子弹或更低版本),那么我期望为代码提供专用的测试/测试套件