2017-04-13 105 views
1

我不知道如何爲我有的代碼編寫單元測試。我理解代碼中發生了什麼,但我不知道如何去編寫單元測試。我該如何去做這個單元測試?

我已經試過了,但我現在很難過。代碼只是打印出一個名字數組,並去除特殊字符。我想測試代碼的第一行並測試特殊字符是否被剝離。

firstNameParts = new ArrayList<String>(Arrays.asList(first.split("(|-)"))); 
System.out.println("Length of First Name Parts: " + firstNameParts.size()); 
for (int i = 0; i < firstNameParts.size(); i++) { 
    System.out.println("First Name Part " + i + ":" + firstNameParts.get(i)); 
    // strip out special chars 
    firstNameParts.set(i,firstNameParts.get(i).replaceAll("[^A-Za-z]+", "")); 
    System.out.println("Stripped First Name Part " + i + ":" + firstNameParts.get(i)); 
} 
+0

將要測試的第一部分提取到返回列表的方法,然後測試該方法。 –

+0

「測試代碼的第一行並測試特殊字符是否被剝離」:這不是第一行所做的。它只是將字符串分割成由空格或連字符分隔的部分。 – Henry

+0

@亨利字符串被分割在代碼的下半部分。第一行做你說的。我解釋了它的錯誤。我只是想知道它如何作爲單元測試進行測試。對於這兩個步驟。我無法把我的頭包在裏面。 – Jay

回答

1

爲了測試並更好地組織代碼,應該將「動作」代碼與「渲染」代碼分開。這使得每個動作單元都易於測試:

static List<String> extractNameParts(String name) { 
    return new ArrayList<String>(Arrays.asList(first.split("[ -]"))); 
} 

static String removeSpecialChars(String str) { 
    return str.replaceAll("[^A-Za-z]+", ""); 
} 

這些顯然很容易測試,因爲它們只做一件事。

請注意,方法的名稱基本上是代碼中註釋的變體。作爲一個經驗法則,不是寫評論,而是創建一個方法。這樣做正式命名代碼,使其可重用和可測試。你的代碼看起來更整潔,更易讀。

下面是它可能是什麼樣子:

firstNameParts = extractNameParts(first); 
System.out.println("Length of First Name Parts: " + firstNameParts.size()); 

for (int i = 0; i < firstNameParts.size(); i++) { 
    String namePart = firstNameParts.get(i); 
    System.out.println("First Name Part " + i + ":" +); 
    firstNameParts.set(i, removeSpecialChars(namePart); 
    System.out.println("Stripped First Name Part " + i + ":" + namePart); 
} 

至於測試的輸出,你可以有你的代碼打印到指定PrintStream(其中System.out就是其中之一),而不是假設代碼打印到控制檯。然後,您可以讓您的測試代碼將PrintStream傳遞給代碼,然後檢查其內容。