簡體   English   中英

Java不良做法:僅將return語句添加到方法中以進行測試?

[英]Java bad practice: adding return statement to method solely for testing?

僅出於測試方法而不在實際代碼本身中使用返回語句的目的而添加return語句是不好的做法嗎?

作為一個示例,我正在測試一個read方法,然后是一系列方法,這些方法最終將創建一個對象,該對象的屬性被其正在讀取的文件行所吸收。

據我了解,可以使用Mockito測試讀取方法,而不必添加return語句。 或者可以測試是否調用了另一種方法( readPerLine ),但是我還沒有找到合適的測試程序來執行此操作。 這兩個選項可能意味着如果使用正確的編碼過程,我的一般問題就不重要了,如果是這樣,請告訴我。

但是,目前,以下兩個選項似乎是測試read方法(一部分)的最簡單方法:

  1. 添加一個return語句,其中包含該方法讀取的行的數組,該語句在該方法的末尾執行。
  2. 通過測量對象的屬性是否正確來測試讀取方法和創建對象的后續方法的組合。 並通過單獨測試后續方法。 這不是首選的雙重錯誤,讀取方法中為1,后續方法的概念設計中為1,可能會在此測試中抵消,但會導致讀取壽命錯誤。
  3. 修改(讀取)方法,使其返回行的數組,該數組從Main傳遞到后續方法。

我當前編寫的read方法的示例代碼:

public void readFile(String filename) {
        FileReader reader;
        BufferedReader br;
        String line = null;
        try {       
            br = new BufferedReader(new FileReader(filename));

            while ((line = br.readLine()) != null) {
                readPerLine(line); //converts line into properties for an object.
            }  
            br.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

因此,我尚未解決以下難題。

  • 我知道有時候您需要重寫您的方法以進行測試。
  • 但是我不知道添加功能(例如,實際代碼未使用而是僅用於測試的return語句)是好還是不好的做法。 此外,如果這樣做,我仍然不會完全測試read方法,調用另一個方法仍不會測試。
  • 或者,如果我首先運用適當的禮節,是否完全不會出現這種困境。

我建議不要在方法中添加return語句以啟用測試,而應該對方法進行重做以分離某些功能。

我認為問題出在這里:

readPerLine(line); //converts line into properties for an object.

也許您在這種方法上做得太多。 您可以將其分解為幾種不同的方法,例如:

  1. 讀取該行以獲得String數組
  2. 將字符串轉換為正確的數據類型
  3. 建立您的物件並設定其屬性

如果這樣做,則可以檢查每個步驟的功能並為每個步驟進行測試。 在測試主要方法readFile(String filename) ,您可以使用Mokito檢查是否使用正確的參數調用了每個方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM