2017-03-31 109 views
3

所以我有我給他一天的樣品的方法中,它返回我一個星期的第一天和最後一天,其中一天:我需要測試方法是測試類

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測試中的方法),我需要爲這個方法做測試,我必須在其他類(測試之外)中移動它嗎?我知道這是一個奇怪的問題,我已經在谷歌搜索,失敗。 (也許我不能問谷歌的權利)。 謝謝:)

回答

3

沒有abso琵琶做某事的方式,一切都取決於項目。

本主題對所有人的主觀性都是開放的。

IMO,如果您在單個測試類中多次使用代碼塊,應該使用本地方法提取該塊。

如果您在多種測試方法中使用它,您應該查看繼承或在測試包下創建一個小的util類。

如果您的主要java代碼也需要該方法,那麼您應該爲它編寫單元測試。測試的目的是驗證你的代碼運行時。 JUnit代碼在運行前運行。

+0

我很感激所有的迴應,但是你確切的是我正在尋找。 –

1

不,這不是寫好「測試測試」的好主意。我在許多公司工作過,無處可做。你寫的東西夠了。

1

在測試類中使用輔助方法是完全可以接受的。事實上,當測試任何複雜的事情時,很難不去做。除非測試幫助器方法在多個項目中的多個測試中使用的實用程序類中(並且因此位於不同項目的主jar中),否則我通常認爲編寫測試幫助器方法的測試是有用的(否則,根據邏輯結論,幾乎不可能有任何代碼重用和完全測試的類)。

1

我會說這個規則是類似的測試代碼和產品代碼是相同的:

  • 如果使用代碼模式不止一次在一個類中,它解壓到一個方法
  • 如果您在同一個軟件包中的多個類中使用它,請將該方法移動到具有軟件包級可見性的實用程序類
  • 如果您在多個軟件包中使用它,請將該實用程序類移到專用實用程序包中,使其公開
  • 如果您在多個項目中使用代碼,它移動到一個特定團隊的庫
  • 如果您發現您的整個組織一再需要這個功能,將其移動到全局庫
  • 如果你發現整個世界需要它,開源它

基本上是:使代碼的可見,因爲它需要的,但不是更多

是的,如果你提取您的代碼到一個實用工具類(第2點或更低),那麼我會期望專用的測試/代碼測試套件

2

您不需要測試測試方法(正如其他人所指出的那樣)。但是,我建議將預期結果存儲爲LocalDate實例,而不是通過字符串實時創建它們。這樣可以避免轉換代碼中可能存在的錯誤。