2017-04-13 7 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

@Henry文字列がコードの下半分に分割されています。最初の行は、私が言ったことを行います。私はそれを間違って説明しました。単体テストとしてどのようにテストされるかを知りたいのです。それの周りに私の頭を包む。 – 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]+", ""); 
} 

これは明らかに1つのことしかしないため、テストするのが簡単です。

メソッドの名前は、基本的にコード内のコメントの変形です。経験則として、コメントを書く代わりに、代わりにメソッドを作成します。これにより正式にコードの名前が付けられ、再利用可能でテスト可能になります。あなたのコードはきれいに見え、より読みやすくなります。ここで

は、それがどのように見えるかです:出力をテストするためのよう

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が1となっている)の代わりに、コンソールにコードが印刷を想定しての。その後、テストコードにPrintStreamを渡して、その内容を調べることができます。

関連する問題