From: Tomoyuki Chikanaga Date: 2011-12-29T13:08:14+09:00 Subject: [ruby-dev:45061] [ruby-trunk - Bug #5822][Open] testunit に -j オプションを渡すと稀にテストを実行せずに終了する Issue #5822 has been reported by Tomoyuki Chikanaga. ---------------------------------------- Bug #5822: testunit に -j オプションを渡すと稀にテストを実行せずに終了する https://bugs.ruby-lang.org/issues/5822 Author: Tomoyuki Chikanaga Status: Open Priority: Normal Assignee: Shota Fukumori 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 -- http://redmine.ruby-lang.org