【发布时间】:2019-07-17 00:33:28
【问题描述】:
我有一个大型集成测试套件,测试类是并行执行的,类方法是顺序执行的。有 2 个测试类使用相同的服务来创建/读取/删除实体,并且共享此服务会产生竞争条件:
- Foo 类正在创建记录
- 班级栏正在删除所有记录
- Foo 类试图读取创建的记录,断言它存在,但此时它已被 Bar 删除。
我尝试使用 JUnit 的 @ResourceLock 注释这两个类,但没有成功,也许我遗漏了什么?
例子:
@ResourceLock("serivceResource")
class Foo {
@Test
void fooTest(){
//create a record
//read the created record
//assert record created
}
}
@ResourceLock("serivceResource")
class Bar {
@Test
void barTest(){
//wipe all records
}
}
Foo#fooTest 和 Bar#barTest 处于竞争状态,对 @ResourceLock 的使用存在争议。
我想知道我是否需要以某种方式配置 JUnit 才能使其工作?
【问题讨论】:
-
你如何使用@ResourceLock?有代码吗?
-
@QingfeiYuan 我只是注释了这两个类,它将与资源键参数相同的字符串传递给注释
-
我认为 ResourceLock 注释使用
Object... 而不是字符串的值。 “serviceResource”和“serviceResource”是 2 个不同的对象,因此 ResourceLocks 不会互相阻塞。您需要创建静态字符串并为每个锁引用它