我是Java的新手,最近我了解到JUnit是测试类的好工具。
我建立了一个名为Person的课程:
public Person {
private String personName;
private String personID;
public Person(String personName, String personID){
this.personName = personName;
this.personID = personID;
}
/* Getters and setters */
}
然后我建立了一个类,该类接收一个充满人员的.bat文件,其信息如下:
1, Carl
2, Jonh
...
我正在逐行读取该文件并创建实例:
public Person importPerson(String line) {
String[] splitPersons = line.split(", ");
int personID = Integer.valueOf(splitPersons[0]);
String personName = splitPerson[1];
Person newPerson = new Person(personID, personName);
return newPerson;
}
现在,我想使用JUnit测试我的importPerson。我为此建立了一种方法,但不确定该测试是否进行了所有必要的验证。
我应该对代码进行哪些更改以优化验证?
@Test
public void testImportPerson() {
String line = "1, Carl";
Person test = personsGestor.importPerson(line);
assertEquals("Error inserting ID", 1, test.getPersonID());
assertEquals("Error inserting Name", "Carl", test.getPersonName());
}
谢谢。
答案 0 :(得分:1)
您的测试是一条快乐的道路测试。尝试添加一些负面测试。例如,如果行无法按照您的方法预期的方式进行解析,该怎么办?如果它没有ID等,该怎么办?
答案 1 :(得分:1)
我建议对以下条件进行单元测试:
答案 2 :(得分:0)
您到底要测试什么?
如果您查看该Person
类,那么我很难进行测试:它仅具有getter和setter(包括构造函数),而没有真正的逻辑/行为。我将测试重点放在行为上。当然,您也可以弄乱设置方法和获取方法,因此,如果您愿意,可以添加一个测试。
该importPerson
类具有更多功能。那是生产代码的一部分吗?然后一定要为它编写测试。我会尝试快乐的路径(就像您已经做过的那样),以及各种错误条件:没有名字,没有姓氏,没有逗号,带逗号的名字(如果有意义),无效的文件(权限被拒绝)。
如果importPerson
是测试设置的一部分,那么您的测试太复杂了---它比被测试的代码要复杂得多!删除外部文件。在单元测试中拥有外部依赖项(例如文件系统,网络或数据库)总是很糟糕的,您通常会mock使用它们,以使测试更加可靠且不那么脆弱。
也就是说,您应该研究test-driven development,它将指导开发人员进行测试,并自动提出应该测试什么的问题。