2014-03-27 270 views
0

我從未使用過JUnit,並且在設置測試時遇到了一些麻煩。我有一個Java項目和一個包,都命名爲'Project1',我試着測試一個名爲'Module'的類。此刻,我只是想檢查這些值是否正確。JUnit設置測試用例

模塊類

package Project1; 
//This class represents a module 
public class Module { 

     public final static int MSC_MODULE_PASS_MARK = 50; 
     public final static int UG_MODULE_PASS_MARK = 40; 
     public final static int MSC_MODULE_LEVEL = 7; 
     public final static int STAGE_3_MODULE_LEVEL = 6; 

     private String moduleCode; 
     private String moduleTitle; 
     private int sem1Credits; 
     private int sem2Credits; 
     private int sem3Credits; 
     private int moduleLevel; 


     public Module(String code, String title, int sem1, int sem2, int sem3, int level) 
     { 

      moduleCode = code; 
      moduleTitle = title; 
      sem1Credits = sem1; 
      sem2Credits = sem2; 
      sem3Credits = sem3; 
      moduleLevel = level; 

     } 

     //method to return the module code 
     public String getCode() 
     { 

      return moduleCode; 

     } 
     //INSERT A BUNCH OF GET METHODS 

}

測試用例

這裏是我迷路。我試圖給一些虛擬的值來測試,但我不知道如何通過模塊的實例來測試。

package Project1; 

import static org.junit.Assert.*; 

import org.junit.Before; 
import org.junit.BeforeClass; 
import org.junit.Test; 


public class TestCase { 
    @BeforeClass 
    public static void setUpBeforeClass() throws Exception { 


    } 

    @Before 
    public void setUp() throws Exception { 
     Module csc8001 = new Module("CSC8001", "Programming and data structures", 20, 0, 0, 7); 

    } 
    @Test 
    public void test() { 
     if (csc8001.getCode() == "CSC8001") { 
      System.out.println("Correct"); 
     } 
     else{ 
      fail("Not yet implemented"); 
     } 
    } 

} 

回答

0
import static org.junit.Assert.assertEquals; 

public class TestCase { 

    private final Module csc8001 = new Module("CSC8001", "Programming and data structures", 20, 0, 0, 7); 


    @Test 
    public void testGetCode() { 
     assertEquals("Some error message", "CSC8001", csc8001.getCode()) ; 
    } 

} 
1

使您的Module變量成爲您的測試類中的實例變量,而不是方法中的局部變量。然後@Before方法將剛剛初始化該變量,而不是聲明它。那麼它將在任何@Test方法的範圍內。

順便提一句,compare your string contents with String's equals method, not ==

+0

實際上,您可以在此省略setUp方法並直接初始化mebmber變量。在運行之前,Junit會爲每個測試用例創建一個新的測試類實例。 – Puce

+0

@Puce相關:[最佳實踐:初始化setUp()或聲明中的JUnit類字段?](http://stackoverflow.com/a/526085/1426891) –

0

始終使用等於:

if (csc8001.getCode().equals("CSC8001")) { 

此外聲明csc8001作爲一個類的成員。

public class TestCase { 
private Module csc8001; 

@Before 
    public void setUp() throws Exception { 
     csc8001 = new Module("CSC8001", "Programming and data structures", 20, 0, 0, 7); 

    } 
0

讓你Module一個實例變量。請記住,對於每個單獨的@Test方法,JUnit將創建一個單獨的測試類實例,並在其上運行所有的方法@Before。儘管你可以在你聲明的同一個地方實例化你的系統,it may be advantageous to keep it in @Before as you have it

public class TestCase { 
    private Module csc8001; 

    @Before public void setUp() throws Exception { 
    csc8001 = new Module("CSC8001", "Programming and data structures", 20, 0, 0, 7); 
    } 

    @Test public void test() { /* ... */ } 
} 

您還可以使用assertEquals檢查平等,這將自動fail有一個明確的信息,如果該參數不匹配。

@Test 
public void codeShouldEqualCSC8001() { 
    assertEquals("CSC8001", csc8001.getCode()); 
} 

assertEquals多在org.junit.Assert documentation

p.s.請記住,前綴test和名字setUp從JUnit 3中遺留下來的,而且使用JUnit4或更好(與像@Before@Test註解),您可以自由添加多個@Before@After方法,給你所有的方法無約束的名字。