为了账号安全,请及时绑定邮箱和手机立即绑定

类型为 T 的 Java 参数化 JUnit

类型为 T 的 Java 参数化 JUnit

吃鸡游戏 2021-10-20 10:44:44
我试图用 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)不确定如何处理未知类型的所有内容。
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

这就是您可以运行测试的方法。我做了三个改变

  • 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"}

    };

}


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信