如何编写junit测试用例来测试代码
中提到的userList中的重复值public List<User> getUsersNotInCurrentGroup()
{
List<User> userList = null;
userList = getEntityManager().createQuery("select * from User")
return userList;
}
答案 0 :(得分:0)
我想,在这种特殊情况下,你至少应该知道User
的唯一性。
然后使用distinct
子句添加第二个SQL查询,并比较两个返回集合的大小。它的集合大小相同,没有重复。
如果比较每个查询的SQL count(1)
返回的大小,那么会更容易。
但是这不再是Java Unit测试了,变成了一种DB单元测试:)
答案 1 :(得分:0)
为重复项编写测试的正确方法取决于您的应用程序定义为重复项。
在Java中,每个对象都从Object class继承方法equals(Object obj)
。除非您的User
对象覆盖该方法,否则列表中保存的两个User
对象将被视为相等,因为equals()
方法比较表示对象的哈希码而不是数据值存储在该对象中。
如果您可以设想需要检查两个User
对象在应用程序中的其他任何位置是否相同,那么最好的选择是覆盖equals(Object obj)
,以便它比较应用程序认为的值与确定两个User
对象是否相同有关。
例如:
public class User {
private int ID;
private String nickname;
private String email;
...
@Overrides
public boolean equals(Object obj) {
if (obj.getClass() != User.getClass()) {
return false;
} else {
if (obj.getId() == this.getId() &&
obj.getEmail().equals(this.getEmail()
) {
return true;
} else {
return false;
}
}
}
}
在此示例中,确定一个User
是否与另一个nickname
重复的方式,我们检查这两个对象的ID和电子邮件是否相同,但我们并不关心{ {1}}字段不同。这种决心完全基于业务需求。
一旦你有这个方法,你可以遍历列表,看看给定的对象是否与列表中的任何其他对象相同,使用equals()方法来比较它们。
作为旁注,如果您只是普遍关注的是没有任何重复项的集合,则可以使用Set而不是List,这将调用您覆盖的equals()
方法为你比较对象。