Java 在参数化测试中测试静态方法

Java 在参数化测试中测试静态方法,java,unit-testing,junit,static,Java,Unit Testing,Junit,Static,我有一个类,它是有向无环图上拓扑排序的一个实现。此类中有两种方法: 公共静态int[]sort(int[]dag)-将表示dag的二维数组作为参数,并返回有序节点的数组 私有静态无效访问-该访问执行深度优先搜索,并用于排序方法 我必须编写一个JUnit测试来测试具有不同输入的代码。我对JUnit测试比较陌生,不知道如何解决这个问题。我想我需要编写一个参数化测试,但是如何测试静态方法sort(int[][]dag)?我需要模拟对象吗?如果您能给我一些见解,我将不胜感激。1.您可以在JUNIT中使用

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

  • 公共静态int[]sort(int[]dag)-将表示dag的二维数组作为参数,并返回有序节点的数组

  • 私有静态无效访问-该访问执行深度优先搜索,并用于排序方法


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

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

    private int fInput;
    预期的私有整数;
    @参数
    公共静态收集数据(){
    返回Arrays.asList(新对象[][]{
    { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }  
    });
    }
    
    也看看下面的帖子

    由于您是新手,因此有一些指导思想:

    • 我建议最初使用普通的JUnit测试。意思:您编写了很多小测试用例,每个测试都由以下3个元素组成:1)您准备了一个输入数组,该数组应该测试排序算法的某个方面;2)您使用该输入调用sort();3)您检查是否收到了您期望的输入结果;或者检查是否引发了预期的异常(例如,当传入格式错误的输入数组时)
    • 如前所述,您从许多小测试开始,每个小测试针对排序方法的不同“契约元素”;或者使用“白盒视图”-对生产代码中的每个可能路径进行一次测试。
      • 当这种方法奏效,并且您确信自己了解如何使用/创建这些“简单”测试时,您将研究高级功能,例如参数化测试
    • 当你想做一些很酷的事情时,你可以在谷歌上搜索快速检查。。。一种非常不同但功能强大的测试方法——来自其他语言,但也可以使用java
    最后:只测试公共sort()方法,避免测试私有实现细节

     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 }  
               });
        }