如何确保我的 class 中的线程在每次 rspec 测试后结束?
How can I make sure threads inside my class end after each rspec test?
我有一个 jruby class,它包含一个心跳,每隔特定秒数执行一次操作:(下面的简化代码)
class Client
def initialise
@interval = 30
@heartbeat = Thread.new do
begin
loop do
puts "heartbeat"
sleep @interval
end
rescue Exception => e
Thread.main.raise e
end
end
end
end
我有一系列 rspec 实例化此 class 的测试。
在每次测试结束时,我希望对象被销毁,但线程似乎仍然存在。
目前我已经用以下方法解决了这个问题:
client.rb:
def kill
@heartbeat.kill
end
rspec:
after(:all) do
client.kill
end
这似乎可以解决问题 - 但这并不是最好的方法。
解决这个问题的最佳方法是什么?
使用版本 jruby-9.1.10.0 & rspec 3.7.0
编辑:
根据 http://ruby-doc.org/core-2.4.0/Thread.html 我希望线程在主线程执行时正常终止
在我的测试中,我用
实例化了客户端
describe Client do
context 'bla' do
let(:client) do
described_class.new
end
it 'blas' do
end
end
end
您应该将 after(:all)
替换为 after(:each)
。
应该是您想要执行的操作的正确语法,因为 after(:all)
在所有测试用例都已 运行 之后进行评估。
我有一个 jruby class,它包含一个心跳,每隔特定秒数执行一次操作:(下面的简化代码)
class Client
def initialise
@interval = 30
@heartbeat = Thread.new do
begin
loop do
puts "heartbeat"
sleep @interval
end
rescue Exception => e
Thread.main.raise e
end
end
end
end
我有一系列 rspec 实例化此 class 的测试。
在每次测试结束时,我希望对象被销毁,但线程似乎仍然存在。
目前我已经用以下方法解决了这个问题: client.rb:
def kill
@heartbeat.kill
end
rspec:
after(:all) do
client.kill
end
这似乎可以解决问题 - 但这并不是最好的方法。
解决这个问题的最佳方法是什么?
使用版本 jruby-9.1.10.0 & rspec 3.7.0
编辑: 根据 http://ruby-doc.org/core-2.4.0/Thread.html 我希望线程在主线程执行时正常终止 在我的测试中,我用
实例化了客户端describe Client do
context 'bla' do
let(:client) do
described_class.new
end
it 'blas' do
end
end
end
您应该将 after(:all)
替换为 after(:each)
。
应该是您想要执行的操作的正确语法,因为 after(:all)
在所有测试用例都已 运行 之后进行评估。