JUnit 5中的java参数化beforeach/beforeAll
我想为一个类似数据库的小应用程序编写一个测试。此应用程序使用查询,查询应返回正确的结果。这在JUnit5中很容易实现,比如
@BeforeEach
void before() {
database = prepareDatabase();
}
@Test
void testQuery1() {
assertThat(database.query("query1")).isEqualTo("result1");
}
@Test
void testQuery2() {
assertThat(database.query("query2")).isEqualTo("result2");
}
....
现在我想添加优化开关(例如,查询优化器或数据库索引)。无论运行什么优化开关,查询都应该返回相同的结果(优化应该只改变效率,而不是结果)
对于测试,这意味着我想对prepareDatabase()
的其他实现运行相同的方法(例如,一个带有优化器,一个带有索引,一个没有)
我还没有找到合适的扩展。我想为每个优化设置复制整个类,或者从共享父类提供方法。然而,这并不像JUnit 5完成这项任务的方式。也许有人能给我指出一个能帮我解决这个问题的功能
# 1 楼答案
缺少的JUnit5特性被称为“容器模板”,是https://github.com/junit-team/junit5/issues/871上的预定特性请求
# 2 楼答案
一如既往,有多种可能的方式来实现你的目标。其中之一就是使用Java继承。您甚至不需要连接任何高级JUnit5功能,只需要一个旧的Java概念
使用方法和abstract prepareDatabase()创建抽象类
然后,基于不同的变体,创建实现,只覆盖这个方法
就这样。无需更多,可重用测试在父类中,无需重复
Report example