单元测试线性搜索方法

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 类型参数,因此此处不需要&lt;T extends Comparable&gt; 声明。您在测试方法体和数组中显式使用了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接口

以上是关于单元测试线性搜索方法的主要内容,如果未能解决你的问题,请参考以下文章

单元测试-unittest

Python单元测试框架:unittest

selenium2学习:单元测试框架

基于appium实现的线性代码引用unittest单元测试框架

领域驱动单元测试详解

测试:FileSearch文件搜索项目