测试Java类

时间:2011-11-18 00:41:16

标签: java testing junit

我正在使用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");
    }
}

我需要在源代码方法中测试每个语句。我卡住了,不知道还能做什么。任何解决方案?

3 个答案:

答案 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(),那么第一行会更精确。