如何测试线程

时间:2018-10-23 09:15:00

标签: ruby rspec thread-synchronization

我们有主题:

module Task
  def self.execute
    "result"
  end
end

threads = []
threads << Thread.new { Task.execute }

我们需要指定检查结果的测试:

expect(Task.execute).to eq("result")

我们在线程内添加了一个线程:

threads << Thread.new do
  deep_thread = Thread.new { Task.execute }
  deep_thread.join
end

我们如何检查线程内方法调用的结果?我们如何检查两个线程是否完成,以及如何检查deep_thread的结果?

1 个答案:

答案 0 :(得分:1)

在线程逻辑之外单独测试方法调用的结果。

然后分别使用以下代码测试线程创建逻辑:

let(:thread) { double }
it 'creates threads' do
  expect(Thread).to receive(:new).exactly(5).times.and_return(thread)
  expect(thread).to receive(:join).exactly(5).times.and_return(true)
  expect(Task).to receive(:execute).exactly(5).times.and_return("xyz")
  expect(subject.execute).to eq "xyz"
end