当前位置: 首页 > 知识库问答 >
问题:

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

柳涵意
2023-03-14

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

>

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

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

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

  • 共有2个答案

    暴骏奇
    2023-03-14

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

    • 我建议最初使用普通的JUnit测试。意思:您编写了很多小测试用例,每个测试都由以下3个元素组成:1)您准备了一个输入数组,该数组应该测试排序算法的某个方面;2)您使用该输入调用sort();3)您检查是否收到了您期望的输入结果;或者检查是否引发了预期的异常(例如,当传入格式错误的输入数组时)
    • 如前所述,您从许多小测试开始,每个小测试针对排序方法的不同“契约元素”;或者使用“白盒视图”-对生产代码中的每个可能路径进行一次测试。
      • 当这种方法奏效,并且您确信自己了解如何使用/创建这些“简单”测试时,您将研究高级功能,例如参数化测试

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

    罗新
    2023-03-14

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

    还可以查看下面的post静态junit示例

     类似资料:
    • 问题内容: 在JUnit4中,您可以通过在一种方法中提供参数集合来编写参数化的单元测试,这些参数将被传递给测试的构造函数,并通过另一种方法进行测试。如果我有一个预期引发异常的参数,该如何指定? 问题答案:

    • 主要内容:1. 使用XML传递参数,2. 通过@DataProvider传递参数,3. @DataProvider + 方法,4. @DataProvider + ITestContextTestNG中的另一个有趣的功能是参数化测试。 在大多数情况下,您会遇到业务逻辑需要大量测试的场景。 参数化测试允许开发人员使用不同的值一次又一次地运行相同的测试。 TestNG可以通过两种不同的方式将参数直接传递给测试方法: 使用 使用数据提供者 在本教程中,我们将向您展示如何通过XML 或将参数传递给方法。

    • 主要内容:1 参数化测试的介绍,2 使用@Parameter进行字段注入而不是构造函数,3 使用单个参数进行测试,4 识别单个测试用例1 参数化测试的介绍 自定义流道参数化实现参数化测试。运行参数化测试类时,将为测试方法和测试数据元素的叉积创建实例。 例如,要测试斐波那契函数,请编写: FibonacciTest的每个实例都将使用二元参数构造函数和方法中的数据值构造 @Parameters 。 2 使用@Parameter进行字段注入而不是构造函数 也可以将数据值直接注入字段中,而无需使用@Pa

    • 参数化测试可以用不同的参数多次运行测试。它们和普通的@Test方法一样声明,但是使用@ParameterizedTest注解。另外,您必须声明至少一个将为每次调用提供参数的来源(source)。 参数化测试目前是实验性功能。有关详细信息,请参阅实验性API中的表格。 @ParameterizedTest @ValueSource(strings = { "racecar", "radar", "a

    • 我正在为我的项目编写junit测试用例,但我在这里面临一个问题,就是我在我的一个java类(GraphNodes.java)中使用的方法 这是我的Junit测试类 我的junit失败了,它说excepted<3>但actual<0>而且我不能将静态方法仅改为public,因为这会影响代码的某些功能,而且由于我是junit的新手,所以我不知道如何解决这一问题。所以有人能在这里帮助我吗?谢谢!!

    • 问题内容: 阅读并学习单元测试,尝试理解下面的文章,该文章解释了静态函数调用的困难。 我不清楚这个问题。我一直认为静态函数是在类中舍入实用函数的一种好方法。例如,我经常使用静态函数调用进行初始化,即: //阅读这篇文章后,我现在的目标是… 但是,我为此课程编写的几十个测试是相同的。我什么都没改变,他们仍然都过去了。难道我做错了什么? 该帖子的作者指出: 静态方法的基本问题是它们是过程代码。 我不知