我必须实现一种方法来测试应用程序的不同方法。我正在收集有关JUnit的信息,因为它是正确测试应用程序方法的最有名的方法,但我有很多问题,我需要一些我找不到的答案。
所以我有以下JUnit测试,我更容易想到:
public class Civilian {
private final String firstName;
private final String lastName;
private final int birthDate;
public Civilian(String firstName, String lastName, int year) {
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = year;
}
public String getFullName() {
return firstName + " " + lastName;
}
}
测试类:
public class CivilianTest {
@Test
public void getFullNameTest() {
Civilian civ = new Civilian("bob", "Reynolds",1997);
Assert.assertEquals("bob Reynolds", civ.getFullName());
}
}
在这个例子中,我必须知道getFullName方法的结果,以便在assertEquals()方法中对它进行比较。但是这种测试怎么能保证这种方法在任何情况下都能起作用呢?
在我必须处理的应用程序中,他们使用来自不同数据库的大量数据,这些数据将通过该方法进行修改并返回修改后的数据。
问题是在我使用该方法之前很难知道这些数据的结果。 JUnit只是这样使用的吗?如何在同一数据上测试同一方法的多种用途?
答案 0 :(得分:1)
您应该记住一些测试原则:
对于getFullName()
方法,我看到了四个值得研究的不同案例:
firstName
和lastName
都不为空时firstName
为空且lastName
不为空时firstName
不为空且lastName
不为空时firstName
和lastName
都为空时如果你涵盖了这些案例,那么它无关紧要你输入的实际实时数据是什么;你已经测试了这种方法可能遇到的四种可能状态,并希望你能对这些情况的陌生人做些明智的选择。
主要的是你可能将单元测试与端到端测试混为一谈,其中一个只查看小单元并确保它表现良好,而另一个查看整个应用程序(仍然使用模拟数据,但仍有大量数据),并确保它作为一个有凝聚力的单位行事。请记住:您在此处测试代码的单元,而不是通过此方法测试整个系统。