是否可以编程生成JUnit测试用例和套件?

wj8zmpe1  于 2023-10-20  发布在  其他
关注(0)|答案(4)|浏览(164)

我必须为一组复杂的业务规则编写一个非常大的测试套件,这些规则目前以几种表格形式捕获(例如,如果参数XY Z是这样或那样,则值应该在V1和V2之间)。每个规则都有一个名称和自己的语义。
我的最终目标是有一个测试套件,组织成子测试套件,每个规则有一个测试用例。
一种选择是将所有这些规则都硬编码为测试。这是丑陋的,耗时的,不灵活的。
另一种方法是编写一个Python脚本,该脚本将读取规则文件并使用单元测试生成Java类。如果可以的话,我宁愿避免这种情况。另一种变体是使用Jython。
然而,理想情况下,我希望有一个测试套件,它可以读取文件,然后在其中定义子套件和测试。这些测试中的每一个都可以使用从表文件中获取的某些值进行初始化,在我们的系统中运行固定的入口点,然后根据预期值对结果调用一些验证器函数。
有没有一种合理的方法可以只使用Java来实现这一点?
更新:我可能有点简化了我们的规则。其中一些确实是表格式的(excel风格),其他的更模糊。但总的问题仍然是,我可能不是第一个有这个问题的人。

cnjp1d6j

cnjp1d6j1#

在JUnit 4中,您将需要查看Parameterized runner。它是为您描述的目的而创建的(数据驱动测试)。但是,它不会将它们组织成套房。
在Junit 3中,你可以创建TestSuite和Tests。答案在Junit Recipes中,如果您需要,我可以扩展它(请记住,JUnit 4可以运行JUnit 3测试)。

628mspwn

628mspwn2#

你有没有考虑过使用FIT
你似乎已经准备好了表格,“业务规则”听起来像“业务人员使用excel编写它们”。
FIT是一个基于输入->预期输出Map的表检查测试的系统,并且有一个用于运行这些测试的开源Java库。

2wnc66cl

2wnc66cl3#

我们尝试了FIT,并决定使用Concordion。该库的主要优点是:

  • 测试可以与代码库一起检入(例如,检入Subversion存储库)
  • 它们由标准的JUnit运行程序执行
55ooxyrt

55ooxyrt4#

我用JUnit写了一个类似的东西。我在一个XML文件中有大量的测试用例(30页)。我没有尝试生成不同的测试,而是在一个测试中完成了所有这些,它工作得很好。
我的测试看起来像这样:

void setup() { 
  cases = read in the xml file
}

void test_fn_works() {
  for case in cases {
    assert(case.expected_result, fn(case.inputs), 
        'Case ' + case.inputs + ' should yield ' + case.expected_result);

  }
}

对于Ruby,我完全按照您所说的做了--动态生成测试。但是,在Java中这样做是复杂的,我认为不值得这样做,因为有另一种非常合理的方法。
希望这对你有帮助。

相关问题