这是我第一次使用JUNIT,但实际上我无法使用它。
我有一个人类,其中有firstName和lastName,还有一个测试类,我需要测试这些方法。每次我尝试测试一个,但如果我为特定方法编写了一个测试,它就会失败。
这是我的代码。
人员类
public class Person {
private String firstName;
private String lastName;
public Person (String a, String b) {
firstName = a;
lastName = b;
}
public String getfirstName() {
return firstName;
}
public void setfirstName(String firstName) {
this.firstName = firstName;
}
public String getlastName() {
return lastName;
}
public void setlastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return firstName + " " + lastName;
}
}
人物测试课程
public class PersonTest {
Person p1;
public PersonTest() {
Person p1 = new Person ("Thomas", "Brown");
}
@Before
public void setUp() {}
@After
public void tearDown() {}
@Test
public void testGetfirstName() {
assertEquals("Thomas", p1.getfirstName());
}
@Test
public void testSetfirstName() {}
@Test
public void testGetlastName() {
assertEquals("Brown", p1.getlastName());
}
@Test
public void testSetlastName() {}
@Test
public void testToString() {
assertEquals("Thomas Brown", p1.toString());
}
}
有人能指出我正确的方向吗?
答案 0 :(得分:5)
这是正确的方法:
@Before
public void setUp() {
p1 = new Person ("Thomas", "Brown");
}
您的代码中有2个问题。
public PersonTest() {
Person p1 = new Person ("Thomas", "Brown");
}
这会创建一个本地变量,您的字段p1
会保留null
。
第二种方法是,在setUp
方法中,您不会初始化p1
。
使用@Before
注释的方法将在每次测试之前运行,并将初始化放在那里。我还建议您使用更具描述性的名称,以便将p1
更改为target
或类似名称。
修改:对于set...
方法,您可以执行以下操作:
public class PersonTest {
private static final String TEST_FIRST_NAME = "some name";
Person target;
// ...
@Test
public void testSetFirstName() {
target.setFirstName(TEST_FIRST_NAME);
Assert.assertEquals(target.getFirstName(), TEST_FIRST_NAME);
}
}
此时你可以假设getFirstName
也有效,因为你也对它进行了测试。
旁注:我认为只要您使用Eclipse生成它们,就不必测试getter和setter。这只是不必要的。
答案 1 :(得分:3)
更改
Person p1 = new Person ("Thomas", "Brown"); //this is local variable
到
p1 = new Person ("Thomas", "Brown");// and this will use the instance variable