是否可以以编程方式生成 JUnit 测试用例和套件?
-
22-07-2019 - |
题
我必须为一组复杂的业务规则编写一个非常大的测试套件,这些规则当前以多种表格形式捕获(例如,如果参数 X Y Z 是这样那样,则值应该在 V1 和 V2 之间)。每个规则都有一个名称和它自己的语义。
我的最终目标是拥有一个测试套件,组织成子测试套件,每个规则都有一个测试用例。
一种选择是将所有这些规则实际硬编码为测试。这是丑陋、耗时且不灵活的。
另一种方法是编写一个 Python 脚本来读取规则文件并生成带有单元测试的 Java 类。如果可以的话我宁愿避免这种情况。另一种变体是使用 Jython。
然而,理想情况下,我希望有一个测试套件可以读取文件,然后在其中定义子套件和测试。这些测试中的每一个都可以使用从表文件中获取的某些值进行初始化,在我们的系统中运行固定的入口点,然后根据预期值对结果调用一些验证器函数。
有没有一种合理的方法可以仅使用 Java 来实现这一点?
更新:我可能在某种程度上简化了我们的规则。其中一些确实是表格(Excel 样式),另一些则更加模糊。但一般问题仍然存在,因为我可能不是第一个遇到这个问题的人。
解决方案
在JUnit 4中,你会想看看参数亚军一>。它是为你描述的目的(数据驱动测试)创建的。它不会组织他们到然而套房。
在JUnit 3中可以编程方式创建测试套件和测试。答案是 Junit的食谱,这如果你需要它,我可以扩大(记住,JUnit 4中可以运行JUnit 3个测试)。
其他提示
你有没有使用 FIT 为考虑?
您似乎有表已经准备好了,“业务规则”听起来像“商务人士使用Excel写出来。”
FIT是用于检查基于与输入 - >预期的输出的映射表的测试的系统,以及用于运行这些测试一个开源Java库可用。
我们尝试了散客并决定去 协奏曲. 。该库的主要优点是:
- 测试可以与代码库一起检入(例如,检入 Subversion 存储库)
- 它们由标准 JUnit 运行程序执行
我使用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的,我确实做到了你是什么样的飞行saying--发电试验。这样做在Java中,虽然是复杂的,而且我不认为这是值得的,因为还有另外一个,比较合理的做法。
希望这有助于。