单元测试线性搜索方法
Posted
技术标签:
【中文标题】单元测试线性搜索方法【英文标题】:Unit testing Linear Search method 【发布时间】:2017-10-12 23:55:13 【问题描述】:我正在尝试为更复杂的方法学习一些单元测试。我有一个线性搜索方法,它搜索一个数组并返回另一个包含“目标”索引的数组(如果找到)。我将如何为这种方法编写测试?这是下面的方法。
public static <T extends Comparable> int[] linearSearch3 (T[] data, T
target)
int count = 0;
int index = 0;
int[] indices = new int[data.length];
for (int i = 0; i < data.length;i++)
if (data[i] == null) break;
if (data[i].compareTo(target) == 0)
indices[count] = i;
count++;
Arrays.copyOf(indices, count);
int[] copy = Arrays.copyOf(indices,count);
if(count != 0)
return copy;
else
return null;
这是我目前的测试方法。这两个数组是我的测试类的字段。 intArray 是我正在搜索的数组。并且 newArray 是我要返回的数组?但是,我不确定我是否会正确执行此操作。我在第二行收到不兼容的类型错误。 “不存在类型变量 T 的实例,因此 int[] 符合 Integer,其中 T 是类型变量”。
private final Integer[] intArray = 2, 5, 6, 8, 12, 17, 3, 45, 29, 88, 76, 54,
1, 12, 5, 41, 12, 99;
private final Integer[] newArray = 2;
@Test
public <T extends Comparable> void testLinearSearch3()
System.out.println("Testing LinearSearch3");
Integer result = Searching.linearSearch3(intArray,(Integer)2);
任何帮助将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:您的testLinearSearch3()
方法不依赖于T 类型参数,因此此处不需要<T extends Comparable>
声明。您在测试方法体和数组中显式使用了Integer
类型,这满足了linearSearch3(...)
方法定义中的类型参数要求
【讨论】:
【参考方案2】:如果 newArray 应该包含 2 的索引,我认为它应该是 0 而不是 2
返回的值也可以是一个int[],然后你可以调用assertEquals()来比较返回的数组和newArray
int[] result = Searching.linearSearch3(intArray,(Integer)2);
for(int i=0;i<result.length;i++)
assertEquals(result[i], (int)newArray[i]);
【讨论】:
我建议在循环之前添加一个长度断言,并将结果[i]和newArray[i]都输入assertEquals,这样他们就可以使用Objects#equal接口以上是关于单元测试线性搜索方法的主要内容,如果未能解决你的问题,请参考以下文章