单元测试返回数组最小值的方法

时间:2016-06-03 20:27:37

标签: java arrays unit-testing automated-tests

我有一个理论问题。给出一种方法:

public int findSmallestArrayValue(int[] values){

    int smallest = values[0];

    for (int count = 0; count < values.length; count++){

        if(values[count] < smallest){
            smallest = values[count];
        }
    }

    return smallest;
}

您可以在这里进行单元测试吗?到目前为止,我想出了:

    assertEquals(array.findSmallestArrayValue(new int[]{5,11,3,6,8}),3);
    assertEquals(array.findSmallestArrayValue(new int[]{5,5,5,5,5}),5);
    assertEquals(array.findSmallestArrayValue(new int[]{-1,2,3,4,5}),-1);

现在我问自己,还有什么有用/可能?例如,我想出了:

  • 大于int的值,但Java不允许我这样做吗?
  • 空数组,该怎么做?
  • 使用比int更多的值来填充int数组?

特别是什么是实际有用的,什么不是?你觉得怎么样?

4 个答案:

答案 0 :(得分:0)

到目前为止,您当前的测试想法都很好。这是我考虑添加的其他测试

@Test(expected = IllegalArgumentException.class)
public void emptyArrayIsNotAcceptedArgument() {
    array.findSmallestArrayValue(new int[]{});
}

@Test(expected = IllegalArgumentException.class)
public void nullArrayIsNotAcceptedArgument() {
    array.findSmallestArrayValue(null);
}

@Test
public void lastValueIsSmallest() {
    assertEquals(array.findSmallestArrayValue(new int[]{0,-1}),-1);
}

至于你的想法:

  • 大于int的值,但Java不会让我这样做吗?
    • Java的编译器不允许你将int []传递给该方法,因此不需要测试
  • 使用比int更多的值来填充int数组?
    • Java数组的大小不能大于max int值。无论如何,这对你的测试都没有多大好处。

答案 1 :(得分:0)

有些想到的案例:

  • (您的建议)检查空阵列
    • values.length > 0
  • 检查空数组
    • values != null

这些是您将在方法中处理的情况,并确保该方法输出正确的错误消息或您写入的异常。

答案 2 :(得分:0)

您总是希望测试边界条件。所以你想要测试:

  • 若干
  • 所有否定
  • 正面和负面的混合

你有一些人和其他人提供了其他人。请记住,进行这样的测试:

assertEquals(array.findSmallestArrayValue(new int[]{5,11,3,6,8}),3);

让这样的测试很有价值:

assertEquals(array.findSmallestArrayValue(new int[]{5,11,6,8}),5);

现在,当您遇到方法中的缺陷时,您将需要编写一个公开该缺陷条件的测试。

答案 3 :(得分:0)

真棒!谢谢你的回答,我很感激!我认为好的组合是关键:

public class ArrayValuesTest {

ArrayValues array = new ArrayValues();

@Test
public void returnsSmallestValue() {

    assertEquals(array.findSmallestArrayValue(new int[]{5,11,3,6,8}),3);
    assertEquals(array.findSmallestArrayValue(new int[]{5}),5);
    assertEquals(array.findSmallestArrayValue(new int[]{0}),0);
    assertEquals(array.findSmallestArrayValue(new int[]{-5,-8,-3,-6,-11}),-11);
    assertEquals(array.findSmallestArrayValue(new int[]{-20,11,-3,6,-8}),-20);

}

@Test(expected = ArrayIndexOutOfBoundsException.class)
public void emptyArrayIsNotAcceptedArgument() {
    array.findSmallestArrayValue(new int[]{});
}

@Test(expected = NullPointerException.class)
public void nullArrayIsNotAcceptedArgument() {
    array.findSmallestArrayValue(null);
}

}

您是否认为在第一种测试方法中包含多个断言而不是使用单独的测试方法是不好的做法?