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

What is the best way to create a JUnit test case for the isSorted() method?

所提供的测试 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));
    }

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

您分析了您的方法应该做什么,以及它应该如何针对每个可能的输入发挥作用。在哪些情况下 return 是正确的?对于哪个输入 return false?什么时候应该抛出异常? ...

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

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

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

同时检查:

  • 具有相同元素的二元素数组
  • 2 个元素数组,两个元素的顺序不相等
  • 3个元素数组,最大元素在开始、中间和结束位置。

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

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

  • 如果我有一个数组,此方法 return 为真,它会做什么 return 如果我向最后一个元素添加一个元素{小于、等于、大于}结尾? (希望假,假,真)
  • 如果我有一个数组,但此方法 return 为 false,它会做什么 return 如果我将元素 {小于、等于、大于} 最后一个元素添加到结尾? (希望在所有情况下都是错误的)