JUnit设置了测试用例

时间:2014-03-27 17:50:10

标签: java junit

我以前从未使用过JUnit,而且我在设置测试时遇到了一些麻烦。我有一个Java项目和一个包,名为' Project1'我尝试测试的一个课程名为' Module'。目前我只是想检查这些值是否正确。

模块类

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

}

测试用例

这是我迷路的地方。我试图给出一些虚拟值进行测试,但我不确定如何将Module实例传递给测试。

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");
        }
    }

}

4 个答案:

答案 0 :(得分:1)

使您的Module变量成为测试类中的实例变量,而不是方法中的局部变量。然后@Before方法将初始化变量,而不是声明它。然后它将在任何@Test方法的范围内。

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

答案 1 :(得分:0)

始终使用equals:

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);

    }

答案 2 :(得分: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());
}

org.junit.Assert documentation上的assertEquals及其他内容。

P.S。请记住,前缀test和名称setUp是来自JUnit 3的保留,使用JUnit4或更好(使用@Before@Test等注释)可以自由添加多个@Before@After方法,并为您的所有方法提供无约束的名称。

答案 3 :(得分: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()) ;
    }

}