【问题标题】:Unit testing-Sort Array单元测试-排序数组
【发布时间】:2012-03-03 21:40:43
【问题描述】:

我有一个按升序对数字数组进行排序的方法,我想测试这个方法。我创建了两个单元测试,一个循环遍历所有元素并断言当前元素小于后面的元素,另一个方法断言排序数组与我自己创建的另一个排序数组具有相同的元素。

有没有其他方法可以测试这个方法或者这两个都可以?

我正在使用 java

【问题讨论】:

    标签: java arrays sorting


    【解决方案1】:

    如果您通过 “排序后的数组具有相同的元素” 表示排序后的数组中每个元素都有一定的出现次数,那么这两个测试就足够了。 ({ 1, 1, 2 } 之类的数组不应该是输入 {2, 1, 2} 的有效结果。)另一种表达方式是结果应该是输入的排列。

    您可能感兴趣也可能不感兴趣的第三个要求是算法是否为stable。在这种情况下,您应该添加一个测试,以确保输入中任何两个相等的元素在输出中具有相同的相对顺序。

    【讨论】:

    • 对于第三个要求,我以这种方式包含它:assertTrue(array[i]
    • 不,不是。但是,如果您的数组包含数字(或任何原始值),那么稳定性要求不适用于您的情况。
    【解决方案2】:

    我还会在以下情况下添加测试以涵盖所需的行为:

    • 输入数组为空
    • 输入数组为空或只有一个元素

    但是,除非您有充分的理由,否则您可能应该使用内置的 Arrays.sort(),而不是实现自己的排序。

    【讨论】:

    • 但是如果我给一个空数组,那我该如何测试排序方法呢?
    • 您的测试应检查该方法是否抛出合适的异常(例如 IllegalArgumentException)或返回合适的值(例如 null 或空数组),以适合您的应用程序为准。
    【解决方案3】:
    1. 检查空数组。
    2. 检查 Integer.Max 和 Integer.Min 作为元素
    3. 检查 Integer.Max+1 和 Integer.Max-1
    4. 检查 Integer.Min-1 和 Integer.Min+1
    5. 重复元素
    6. 数组的奇数和偶数个元素
    7. 具有不同基本类型元素的数组
    8. 检查所有负/所有正整数以及两者的混合
    9. 检查返回数组的长度
    10. 只有 1 个元素的数组
    11. 检查排序数组的顺序(asc/desc)
    12. 全为零
    13. 在第一个或最后一个索引处检查 0

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2015-03-18
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多