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

2022-09-03 01:08:25

我必须为一组复杂的业务规则编写一个非常大的测试套件,这些规则当前以多种表格形式捕获(例如,如果参数X Y Z是这样的,则该值应该在V1和V2之间)。每个规则都有一个名称和自己的语义。

我的最终目标是有一个测试套件,组织成子测试套件,每个规则都有一个测试用例。

一种选择是将所有这些规则实际上硬编码为测试。这是丑陋的,耗时的,不灵活的。

另一种方法是编写一个Python脚本,该脚本将读取规则文件并使用单元测试生成Java类。如果可以的话,我宁愿避免这种情况。另一种变体是使用Jython。

但是,理想情况下,我希望有一个测试套件来读取文件,然后在其中定义子套件和测试。这些测试中的每一个都可以使用从表文件中获取的某些值进行初始化,在我们的系统中运行固定的入口点,然后根据预期值对结果调用一些验证器函数。

有没有一种合理的方法可以仅使用Java来实现这一目标?

更新:我可能在某种程度上简化了我们的规则。其中一些确实是表格(excel样式),另一些则更模糊。一般问题仍然存在,因为我可能不是第一个遇到这个问题的人。


答案 1

在 JUnit 4 中,您需要查看参数化运行器。它是为描述的目的(数据驱动的测试)而创建的。但是,它不会将它们组织成套件。

在 Junit 3 中,您可以以编程方式创建 TestSuites 和 Tests。答案在 Junit Recipes 中,如果需要,我可以扩展它(请记住,JUnit 4 可以运行 Junit 3 测试)。


答案 2

你有没有考虑过使用FIT

您似乎已经准备好了表格,“业务规则”听起来像是“业务人员使用excel编写它们”。

FIT是一个系统,用于根据具有输入>预期输出映射的表检查测试,并且可以使用开源java库来运行这些测试。


推荐