2012-03-19 247 views
1

請問,我是Java新手。我怎麼能寫下面的程序的JUnit測試:編寫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(expected= NullPointerException.class) 
public void testAddCode_1() throws Exception 
{ 
    codeKeeper.addCode(null); 
} 

另一個適當的使用如下:

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

通常的方式一個寫代碼是可測試的,而不是相反。

由於沒有方法來查詢狀態,因此您的代碼不是真正可測試的。 當您添加一些訪問狀態的方法時,您可以通過檢查預期的更改來測試一種方法,該方法會更改測試單元中的狀態。

基本上是一個測試

@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 

    } 

在當前的情況下,你只能測試你的代碼是否會拋出異常。