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

时间:2017-05-13 13:50:27

标签: java unit-testing junit static

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

var x = [];
for ( i = 0 ; i < 5; i++) { x.push(i); }

var y = [];
for ( i = 0 ; i < 5; i++) { y.push(i); }    

var type = 'scatter';
var trace1 = { x: x, y: y, type: type };

var data = [trace1];

    Plotly.newPlot('myDiv', data);

另请查看以下帖子 static junit example

答案 1 :(得分:0)

你是新手,有些指导思想:

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

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