问题描述
我正在像这样编写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
钩之前。