使用 void 的 JUnit 测试

JUnit test which use void

我有一个 class Person 并且有一个 void 方法 showDataPerson() 打印:

JavaSeller SA (nip: 567854367)
Address 1
12-345 Warsaw
Numer konta:
23456789765456789098765456

怎样才能做正确的测试?

Class

public void showDataPerson() {
    System.out.println("\n");
    System.out.println(firstName + " " + lastName);
    if (!company.isEmpty()) {
        System.out.println(company + " " + "(nip: " + nip + ")");
    }
    System.out.println(address);
    System.out.println(addressContinued);
    if (!accountNumber.isEmpty()) {
        System.out.println("Numer konta:");
        System.out.println(accountNumber);
    }
    System.out.println("\n");

测试

@Test
public void testAddPerson() {
    Person test = new Person("Bill", "Cage", "JavaSeller SA", "567854367", "Address 1", "12-345 Warsaw", "23456789765456789098765456");
    test.showDataPerson();
    assertEquals("Bill Cage\n" +
            "JavaSeller SA (nip: 567854367)\n" +
            "Address 1\n" +
            "12-345 Warsaw\n" +
            "Numer konta:\n" +
            "23456789765456789098765456", test.showDataPerson());
}

您可以实施的一种解决方案是使用两种方法,一种是 returns 作为字符串表示要显示的数据:

public String dataPersonToString() {
    StringBuilder str = new StringBuilder();
    str.append("\n");
    str.append(firstName + " " + lastName);
    if (!company.isEmpty()) {
         str.append(company + " " + "(nip: " + nip + ")");
    }
    str.append((address);
    str.append((addressContinued);
    if (!accountNumber.isEmpty()) {
       str.append(("Numer konta:");
       str.append((accountNumber);
    }
    str.append(("\n");
    return str;
}

和仅打印数据的 showDataPerson:

public void showDataPerson() {
    System.out.println(dataPersonToString());
}

更改您的测试以测试真正重要的内容,dataPersonToString 方法:

@Test
public void testAddPerson() {
    Person test = new Person("Bill", "Cage", "JavaSeller SA", "567854367", "Address 1", "12-345 Warsaw", "23456789765456789098765456");
    test.showDataPerson();
    assertEquals("Bill Cage\n" +
            "JavaSeller SA (nip: 567854367)\n" +
            "Address 1\n" +
            "12-345 Warsaw\n" +
            "Numer konta:\n" +
            "23456789765456789098765456", test.dataPersonToString());
}

IMO 这种方法的优点是:1) 关注点分离,即, 您将数据的字符串表示与数据的打印分开。 2) 干净、可读、易于实现,既不需要对原始代码和测试代码进行大的重构。