为isSorted()方法创建JUnit测试用例的最佳方法是什么?

时间:2016-03-08 07:25:44

标签: java arrays sorting junit junit4

提供的测试isSorted()方法的JUnit测试用例有什么问题?该方法只是检查一个int数组是否按升序排列。我试图彻底测试该方法但不知道从哪里开始。例如:检查数组是否为空或者只有一个元素。感谢任何帮助。

public class CheckArray {

    /**
     * Returns true if the given array is sorted in ascending order.
     */
    public static boolean isSorted(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            if (a[i] > a[i + 1]) {
                return false;
            }
        }
        return true;
    }
}

public class CheckArrayTest {
    @Test
    public void isSorted() {
        int[] array = { 2, 1 };
        CheckArray haha = new CheckArray(array);
        assertFalse(haha.isSorted(null));
    }

2 个答案:

答案 0 :(得分:1)

创建单元测试的最佳方法是在创建测试的实际方法之前。

您可以分析您的方法应该做什么,以及它应该如何对每个可能的输入起作用。在哪些情况下它返回真实?对于哪个输入它返回false?什么时候应该抛出异常? ...

你为每个案例写了一个单元测试。 一旦你这样做,你就编写实际的方法,看看它是否符合你的单元测试。

编辑:也非常重要,实际存在的测试方法。您正在测试isIntArraySorted方法,但该方法不存在,您应该测试isSorted方法。

答案 1 :(得分:1)

如果数组为空或有一个元素,则检查结果是合理的测试。

同时检查:

  • 具有相同元素的2元素数组
  • 两个订单中包含不等元素的2个元素数组
  • 3个元素数组,在开始,中间和结束位置具有最大元素。

我不确定我会测试多少其他内容(可能是空输入案例)。最终你只需要测试就可以让你对它的正确性有合理的信心;您可以在不增加信心的情况下添加更多测试。

或者,您可以围绕您对该方法如何工作的看法来构建测试,例如

  • 如果我有一个这个方法返回true的数组,那么如果我添加一个元素{小于,等于,大于}最后一个元素到底,它会返回什么? (希望是虚假,虚假,真实)
  • 如果我有一个这个方法返回false的数组,那么如果我将一个元素{小于,等于,大于}添加到结尾的最后一个元素,它会返回什么? (希望在所有情况下都是假的)