我想为一个类似数据库的小型应用程序编写一个测试。此应用程序使用查询,并且查询应返回正确的结果。这很容易在JUnit 5中实现,例如
@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完成此任务的方式。也许有人可以向我指出可以帮助解决此问题的功能?
答案 0 :(得分:0)
和往常一样,有多种方法可以实现您的目标。其中之一是使用Java继承。您甚至不需要连接任何高级JUnit 5功能,只需使用旧的Java概念即可。
使用您的方法和抽象prepareDatabase()创建抽象类。
if($request){
echo 'yes';
exit();
}
然后-基于不同的变体,创建实现,仅覆盖此方法。
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class userService {
user: IUser;
userlist: Array<object> = [];
constructor(user: IUser) {
}
addOject(): void {
this.userlist.push(this.user);
}
getUsers(): any {
return this.userlist;
}
}
就是这样。无需任何其他操作,可重用的测试位于父类中,无需重复。
答案 1 :(得分:0)
缺少的JUnit5功能称为“容器模板”,是在https://github.com/junit-team/junit5/issues/871上的预定功能请求。