Issue #5822 has been reported by Tomoyuki C…
Bug #5822: testunit に -j オプションを渡すと稀にテストを実行せずに終了する
Author: Tomoyuki C.
Status: Open
Priority: Normal
Assignee: Shota F.
Category: lib
Target version:
ruby -v: ruby 2.0.0dev (2011-12-28 trunk 34149) [i686-linux]
make test-all TESTS=“-j2 ruby/test_require.rb”
のように test-all の引数に -j と1ファイルだけ与えると、稀にテストをひとつも実行せずに終了することがあります。
@tasks が空になった瞬間に worker が全て :prepare または :ready だと実行中の worker
が居ないと判断して終了してしまうようです。
以下のような変更で一応発生しなくなりました。一応というのは status の状態遷移をちゃんと確認していないからです。
diff --git a/lib/test/unit.rb b/lib/test/unit.rb
index eb0666a…00313a3 100644
— a/lib/test/unit.rb
+++ b/lib/test/unit.rb
@@ -457,7 +457,9 @@ module Test
bang = $1
worker.status = :ready
if @tasks.empty?
-
break unless @workers.find{|x| x.status == :running }
-
unless @workers.find{|x| [:running,
:prepare].include? x.status}
-
break
-
end else if @options[:separate] && bang.empty? @workers_hash.delete worker.io