java - 类型为 T 的 Java 参数化 JUnit
问题描述
我正在尝试使用 JUnit 参数做一个简单的示例,以查找列表的最小值。我也试图使这项工作与不同的对象类型一起工作,但在这样做时遇到了麻烦。这是我到目前为止所拥有的:
import static org.junit.Assert.*;
import java.util.*;
import org.junit.*;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith (Parameterized.class)
public class MinTest<T> {
public List<? extends T> list;
public T min;
public MinTest(T a, T b, T c) {
this.list.add(a);
this.list.add(b);
this.min = c;
}
@Parameters
public static Collection<Object[]> calcValues()
{
return Arrays.asList (new Object [][] {
// Last value indicates expected value
{1, 3, 1},
{"a", "b", "a"}
});
}
@Test
public void minTest() {
assertTrue("Single element list", min == Min.min(list));
}
}
首先,我无法添加类型为 T 的列表,但我不确定如何格式化输入值以便它们可以处理任何对象类型。此外,测试抱怨对 min 的调用不是正确的输入类型。
min 方法的格式为:
public static <T extends Comparable<? super T>> T min (List<? extends T> list)
不确定如何处理未知类型的所有内容。
解决方案
这就是您可以运行测试的方式。我做了三个改变
MinTest<T>
现在MinTest<T extends Comparable<? super T>>
是T
匹配min
方法的类型- 修复了列表的类型:
List<T>
而不是List<? extends T>
- 初始化列表 (
list = new ArrayList<T>();
) 以便构造函数可以将元素添加到列表中。
这就是你的测试类的样子。
import static org.junit.Assert.*;
import java.util.*;
import org.junit.*;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith (Parameterized.class)
public class MinTest<T extends Comparable<? super T>> {
public List<T> list = new ArrayList<T>();
public T min;
public MinTest(T a, T b, T c) {
this.list.add(a);
this.list.add(b);
this.min = c;
}
@Parameters
public static Collection<Object[]> calcValues()
{
return Arrays.asList (new Object [][] {
// Last value indicates expected value
{1, 3, 1},
{"a", "b", "a"}
});
}
@Test
public void minTest() {
assertTrue("Single element list", min == Min.min(list));
}
}
顺便calcValues
可以直接返回一个Object[][]
数组:
@Parameters
public static Object [][] calcValues()
{
return new Object [][] {
// Last value indicates expected value
{1, 3, 1},
{"a", "b", "a"}
};
}
推荐阅读
- pandas - 如何使用python上的索引列表从列表中删除对象?
- javascript - 使用 HTML、CSS、JS 和 Python 创建日历
- swift - 拖放困难
- javascript - ReactJS Fetch 调用一次但多个请求出去
- javascript - 如何单击我的 html (DOM) 并在我的传单地图上打开现有的弹出窗口。我只使用香草 JS
- go - 当传递的参数是先前运行的 exec 的输出时,为什么 os/exec 命令不能按预期工作?
- javascript - Javascript如何将键值对推送到嵌套对象数组中
- javascript - 函数返回具有不可访问数据的数组
- javascript - 如何从http客户端查询参数并将其发送到节点js服务器?
- c# - 错误 NU1100:无法解析 'Microsoft.AspNetCore.SpaServices.Extensions