使用 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) 干净、可读、易于实现,既不需要对原始代码和测试代码进行大的重构。
我有一个 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) 干净、可读、易于实现,既不需要对原始代码和测试代码进行大的重构。