有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何编写Junit测试用例来测试列表中的重复元素

如何编写junit测试用例来测试下面代码中提到的userList中的重复值

public List<User> getUsersNotInCurrentGroup()
{
List<User> userList = null;
userList = getEntityManager().createQuery("select * from User")

return userList;
}

共 (2) 个答案

  1. # 1 楼答案

    我想,在这个特定的例子中,你至少应该知道是什么使得User独一无二

    然后使用distinct子句添加第二个SQL查询,并比较两个返回集合的大小。如果两个集合的大小相同,则没有重复

    如果比较SQL count(1)为每个查询返回的大小,就会容易得多

    但这不再是Java单元测试,而是一种DB单元测试:)

  2. # 2 楼答案

    编写副本测试的正确方法取决于应用程序定义的副本

    在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是否与另一个重复,我们检查两个对象的ID和电子邮件是否相同,但我们不关心nickname字段是否不同。这种决定完全基于业务需求

    一旦你有了这个方法,你就可以通过使用equals()方法来比较一个给定的对象是否与列表中的任何其他对象相同来遍历列表

    顺便说一句,如果您通常只关心一个没有任何重复项的集合,那么可以使用Set而不是列表,它将调用equals()方法来为您比较对象