如何测试线程
How to test threads
我们有线程:
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
?
的结果
在线程逻辑之外单独测试方法调用的结果。
然后用类似的东西单独测试线程创建逻辑:
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
我们有线程:
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
?
在线程逻辑之外单独测试方法调用的结果。
然后用类似的东西单独测试线程创建逻辑:
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