java如何编写Junit测试用例来测试列表中的重复元素
如何编写junit测试用例来测试下面代码中提到的userList中的重复值
public List<User> getUsersNotInCurrentGroup()
{
List<User> userList = null;
userList = getEntityManager().createQuery("select * from User")
return userList;
}
你可以在下面搜索框中键入要查询的问题!
如何编写junit测试用例来测试下面代码中提到的userList中的重复值
public List<User> getUsersNotInCurrentGroup()
{
List<User> userList = null;
userList = getEntityManager().createQuery("select * from User")
return userList;
}
# 1 楼答案
我想,在这个特定的例子中,你至少应该知道是什么使得
User
独一无二然后使用
distinct
子句添加第二个SQL查询,并比较两个返回集合的大小。如果两个集合的大小相同,则没有重复如果比较SQL
count(1)
为每个查询返回的大小,就会容易得多但这不再是Java单元测试,而是一种DB单元测试:)
# 2 楼答案
编写副本测试的正确方法取决于应用程序定义的副本
在Java中,每个对象都从Object class继承方法
equals(Object obj)
。除非User
对象重写了该方法,否则保存在列表中的两个User
对象都不会被认为是相等的,因为equals()
方法比较的是表示该对象的哈希代码,而不是存储在该对象中的数据值如果您可以设想需要检查应用程序中其他任何地方的两个
User
对象是否相同,那么最好的办法是重写equals(Object obj)
,以便它比较应用程序认为与确定两个User
对象是否相同相关的值例如:
在本例中,为了确定一个
User
是否与另一个重复,我们检查两个对象的ID和电子邮件是否相同,但我们不关心nickname
字段是否不同。这种决定完全基于业务需求一旦你有了这个方法,你就可以通过使用equals()方法来比较一个给定的对象是否与列表中的任何其他对象相同来遍历列表
顺便说一句,如果您通常只关心一个没有任何重复项的集合,那么可以使用Set而不是列表,它将调用
equals()
方法来为您比较对象