2012-03-19 9 views
1

私はJavaを使い慣れていません。テストへJUnitテストを書く

プログラム:

package codekeeper; 

/** 
* 
* @author henryjoseph 
*/ 
import java.util.*; 
import java.io.*; 

public class CodeKeeper { 

    ArrayList<String> list; //no specific amount.. 

    String[] codes = {"alpha","lambda","gamma","delta","zeta"}; 

    public CodeKeeper (String[] userCodes) 
    { 
     list = new ArrayList<String>(); 

     for(int i =0; i<codes.length;i++) 
      addCode(codes[i]); 

     for(int i =0; i<userCodes.length;i++) 
      addCode(userCodes[i]); 

     for(String code:list) 
      System.out.println(code); 
    } 

    final void addCode(String code) 
    { 
     if(!list.contains(code)) 
      list.add(code); 
    } 

    public static void main(String[] args) { 
     System.out.print("Enter your name and press Enter: "); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String name = null; 
     String[] argu = new String[] {name}; 
     try { 
      name = br.readLine(); 

      argu = new String[] {name} ; 
     }catch (IOException e) { 
      System.out.println("Error!"); 
      System.exit(1); 
     } 
     CodeKeeper keeper = new CodeKeeper(argu); 
    } 
} 

サンプルテストコード:

public class MyClassTest { 
    @Test 
    public void testMultiply() { 
     MyClass tester = new MyClass(); 
     assertEquals("Result", 50, tester.multiply(10, 5)); 
    } 
} 

これは書くの標準的な方法ですどのように私は、以下のプログラムのためのJUnitテストを書くことができますジュニットテスト?

答えて

1

いくつかの背景が最初に、次にいくつかの例があります。あなたのコードに対して単体テストを書くときは、あなたのアプリケーションの非常に特殊で有限のケースをテストしています。つまり、各単体テストは、関数(メソッド)が受け取ることができる最大で1つのシナリオをカバーする必要があります。複数の機能を一緒にテストしたい場合は、統合テストを実行します。今、私たちは、あなたが宣言した次の関数を取る場合:

final void addCode(String code)   
{ 
      if(!list.contains(code))   
       list.add(code);   
} 

codeKeeperが正しく初期化されているものとします。
適切なユニットテストは、次のようになります。それはその逆はない、テスト可能な方法で

@Test() 
public void testAddCode_2() throws Exception 
{ 
     codeKeeper.addCode("myMagicCode"); 
     assertTrue(codeKeeper.getList().contains("myMagicCode"); 
} 
1

通常1回の書き込みコード:

@Test(expected= NullPointerException.class) 
public void testAddCode_1() throws Exception 
{ 
    codeKeeper.addCode(null); 
} 

別の適切な使用法は次のようです。

状態を照会するメソッドがないため、コードは実際にはテスト可能ではありません。 状態にアクセスするためのいくつかのメソッドを追加すると、予想される変更をチェックしてテストユニットの状態を変更するメソッドをテストできます。

基本的にテストは、あなたが、あなたのコードが例外をスローするかどうかをテストすることができ、あなたの現在の状況では

@Test 
    public void testConcept() { 

     // 1. achieve a definite/initial state 

     // 2. change this state by one or more methods under test 

     // 3. assertXXX check expected changes 

    } 

です。