Rspec stub_const竞争条件

问题描述

我正在像这样编写rspec测试

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,21);
cal.set(Calendar.MINUTE,30);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime();

,因为stub_const逻辑正常工作,因此测试通过的时间大约为75%,但是25%的竞争条件失败,并且第一个测试的stub_const流入第二个测试的const,因此第二个测试测试的describe Module do describe "method" do context "first_context" do before do stub_const("Module::CONST","stub0") end # logic end context "second_context" do before do stub_const("Module::CONST","stub0 stub1") end # logic end end end 值为Module::CONST。为什么会这样?

解决方法

我已经看到这种事情发生在JRuby上。您可以尝试在存根全局代码的任何代码周围添加显式锁定,或在锁定下运行每个示例:

$lock = Mutex.new

around do |example|
  $lock.synchronize do
    example.run
  end
end

确保在您的before钩之前。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...