所以我有一个这样的课程:
public class Person {
private List<String> list = new ArrayList<String>();
public addPerson(String s) {
this.list.add(s);
}
}
public class TestPerson extends TestCase {
private Person person;
public testAddPerson() {
this.person.addPerson("John");
}
}
我的问题是如何测试列表中添加了John
。
我喜欢做一些测试,比如list.size() == 1
或list.get(0).equals("John")
有什么建议吗?
答案 0 :(得分:0)
您可以use Reflection测试私有变量。
但这可能不是一个好主意。建议通过公共接口测试私有属性。
答案 1 :(得分:0)
对于这个代码测试毫无意义,它实际上会测试列表实现是否会执行它应该执行的操作,而这不应该是测试的一部分。
问题是 - 您的列表在哪里使用,对它的任何公共访问权限,以及预期的行为。这是你应该测试的。
总的来说,这听起来像测试之后,你试图为了测试而不是为了验证而添加测试。
答案 2 :(得分:0)
这个名为shazamcrest的工具非常有用。它将实际和预期的对象序列化为json并进行String比较。您不必修改生产代码(不需要注释,不需要getter,字段可以是私有的)。
assertThat(actualPerson, sameBeanAs(expectedPerson));
它会抛出ComparisonFailure
,因此您可以获得非常好的诊断: