java - 通用方法的 JUnit 测试用例

标签 java generics junit

请原谅我提出了一个可能多余的问题,但我最近一直在学习泛型,并且对于如何测试它们有点不知所措。

这是我的代码,用于查找集合中的最小值的方法:

public static <T> T min(Collection<T> c, Comparator<T> comp) {
  if (c == null || comp == null) {
     throw new IllegalArgumentException("Collection or comparator is null.");
  }
  if (c.isEmpty()) {
     throw new NoSuchElementException("Collection is empty.");
  }
  Iterator<T> itr = c.iterator();
  T min = itr.next();
  if (itr.hasNext()) {
     for (T i : c) {
        if (comp.compare(i, min) < 0) {
           min = i;
        }
     }
  }
  return min;
}

这是我为此方法准备的最小测试用例:

public class SelectorTest{

  @Test
  public void min() {
     Comparator<Integer> intSort = new IntegerSort();
     Integer[] test = {2, 8, 7, 3, 4};
     int expected = 2;
     int actual = Selector.min(test, intSort);
     Assert.assertEquals(expected, actual);
  }

  public static class IntegerSort implements Comparator<Integer> {
     public int compare(Integer o1, Integer o2) {
        return Integer.compare(o1, o2);
     }
  }

}

我从此代码收到的编译器错误如下:

required:java.util.Collection<T>,java.util.Comparator<T>
found: java.lang.Integer[],java.util.Comparator<java.lang.Integer>

显然,我在测试用例中传递的参数不是应该传递的,但我的想法是这样的:我正在传递一个整数数组,它是一个集合,并且我给出它是整数的特定比较器,正如 min 方法所要求的那样。

我应该如何修复这个测试用例才能以这种方式有效地工作,并且不仅可以使用整数,还可以使用 min 方法能够执行的任何类型的集合?

我以前从未成功地编写过通用测试用例,所以我不知道如何才能做到这一点。

谢谢!

最佳答案

您的问题与泛型无关。当方法需要 Collection 时,不能将数组作为参数传递。数组不实现 Collection 接口(interface)。如果您要传递 ArrayList 的实例,它应该可以正常工作。

关于java - 通用方法的 JUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249897/

相关文章:

java - 如何在 Android Studio 2020 中找到 R 文件?

java - java 变量的正则表达式

C# 中的 Java 有界通配符

java - 桥接方法创建

c# - 使用动态生成的类型创建通用类的对象

unit-testing - GWT 测试用例运行失败 : JUnitFatalLaunchException

java - AspectJ:如何替换现有注释

java - 对 setter 和 getter 的 JUnit 测试失败

java - 多个线程写入单个数据库表

java - 如何在生效日期更新用户?