gpt4 book ai didi

类型为 T 的 Java 参数化 JUnit

转载 作者:行者123 更新时间:2023-12-02 10:45:57 26 4
gpt4 key购买 nike

我正在尝试使用 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>>这样Tmin 的类型匹配方法
  • 修复了列表的类型: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"}
};
}

关于类型为 T 的 Java 参数化 JUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52573669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com