我以前从未使用过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");
}
}
}
答案 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()) ;
}
}