我正在使用JUnit测试Java应用程序。以下是特定方法的源代码:
public class Surgery {
Vector<Patient> patients;
String name;
public Surgery(String name) {
patients = new Vector<Patient>();
this.name = name;
}
public Patient findPatient(String name) {
Iterator<Patient> patientIt = patients.iterator();
while(patientIt.hasNext()) {
Patient next = patientIt.next();
if (next.getName().equals(name))
return next;
}
return null;
}
这是JUnit测试方法:
public class SurgeryTest {
private Vector<Patient> vector;
Surgery surgery_N =new Surgery("Teddy");
ByteArrayOutputStream ans = new ByteArrayOutputStream();
final String separator = System.getProperty("line.separator");
@Test
public void testFindPatient() {
surgery_N.findPatient("Teddy");
}
}
我需要在源代码方法中测试每个语句。我卡住了,不知道还能做什么。任何解决方案?
答案 0 :(得分:1)
您的Surgery
课程无法从您提供给我们的代码示例中添加患者,因此您的单元测试应该一无所获。
要测试源代码方法中的每个语句,您应该创建多个测试,覆盖代码中的每个可能路径。这意味着,在您的测试中,您将需要测试返回患者姓名的情况(如果存在),以及患者不存在的情况(返回null)。
以下是您可以使用的一些示例方法:
public void testFindPatientWherePatientExists() {
Patient thePatient = surgery.findPatient("Teddy");
assertEquals("Teddy", thePatient.getName());
}
public void testFindPatientWherePatientDoesntExist() {
assertNull(surgery.findPatient("I dont exist"));
}
答案 1 :(得分:0)
致电findPatient(...)
时的预期结果是什么?您可以使用assertEqual(...)
public class SurgeryTest {
Surgery surgery;
@Before
public void setUp() {
surgery = new Surgery("Teddy");
}
@Test
public void testFindPatient() {
Patient p = ...; // expected result
assertEquals(p, surgery.findPatient("Teddy"));
}
}
带有@Before
注释的方法将在具有@Test
注释的每个方法之前调用。因此,每次都要测试新的手术对象。
答案 2 :(得分:0)
首先,请注意您传递给Surgery构造函数的名称不会被放入患者Vector中。这是一个外科领域。建议你将arg重命名为“surgeryName”然后你需要一个新方法addPatient(String patientName);并调用addPatient(“Teddy”)。
那就是说,一般来说,你应该测试现有名称和缺席名称。 e.g。
(断言方法的确切名称可能有所不同)
assertNotNull(surgery.findPatient("Teddy"));
assertNull(surgery.findPatient("A Name I did not add"));
(如果是像wannik建议的那样是assertEquals(),那么第一行会更精确。