【问题标题】:Testing static methods in a parameterised test在参数化测试中测试静态方法
【发布时间】:2017-10-12 17:29:55
【问题描述】:

我有一个类,它是有向无环图上拓扑排序的实现。这个类有两种方法:

  1. public static int[] sort(int[][] dag) - 将表示 DAG 的二维数组作为参数,返回有序节点数组

  2. private static void visit - 访问执行深度优先搜索,在排序方法中使用

我必须编写一个 JUnit 测试来测试具有不同输入的代码。我对 JUnit 测试比较陌生,我不确定如何解决这个问题。我想我需要编写一个参数化测试,但我如何测试静态方法 sort(int[][] dag)?我需要任何模拟对象吗?如果您能给我一些见解,我将不胜感激。

【问题讨论】:

    标签: java unit-testing junit static


    【解决方案1】:

    1.您可以在JUNIT中使用参数化测试。通过它您可以提供多种输入组合。根据您的要求您可以更改。我们最近使用我们的项目进行的更有趣的随机测试将随机生成输入。请看一下 https://github.com/randomizedtesting/randomizedtesting

     private int fInput;
    
      private int fExpected;
    
     @Parameters
        public static Collection<Object[]> data() {
            return Arrays.asList(new Object[][] {     
                     { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }  
               });
        }
    

    还可以看看下面的帖子 static junit example

    【讨论】:

      【解决方案2】:

      作为新手,一些指导思想:

      • 我建议最初使用普通的 JUnit 测试。含义:您编写了很多小测试用例,每个测试都包含以下 3 个元素:1)您准备一个输入数组,该数组应该测试您的排序算法的某个方面 2)您使用该输入调用您的 sort() 3)您检查您是否收到了您所期望的输入结果;或者您检查是否引发了一些预期的异常(例如,当传入格式错误的输入数组时)。
      • 如前所述,您从许多小测试开始,针对排序方法的每个不同“合同元素”进行测试;或使用“白盒视图”——生产代码中的每个可能路径进行一次测试。
        • 当它起作用时,并且您确信自己了解如何使用/创建那些“简单”测试时,您就会研究高级功能,例如参数化测试。
      • 当您想做一些非常酷的事情时,您可以在 Google 上搜索 QuickCheck... 一种非常不同但功能强大的测试方法 - 来自其他语言,但也可以使用 java。

      最后:你只测试你的公共 sort() 方法,你避免测试私有实现细节。

      【讨论】:

        猜你喜欢
        • 2015-05-26
        • 2019-05-11
        • 1970-01-01
        • 2018-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        相关资源
        最近更新 更多