テストで発生した失敗とエラーをログ ファイルに書き込んで、画面に表示されないようにしようとしていますが、エラーとアサートの失敗が STDERR ではなく STDOUT に書き込まれるように見えます。何時間もグーグルで調べた後、この出力をリダイレクトする方法に関する情報を見つけることができませんでした。助けていただければ幸いです。
1377 次
3 に答える
1
後でログファイルに書き込むために、出力を StringIO にリダイレクトしようとしましたか?
original_stdout = $stdout
original_stderr = $stderr
fake_stdout = StringIO.new
fake_stderr = StringIO.new
$stdout = fake_stdout
$stderr = fake_stderr
次に、テストを実行した後:
$stdout = original_stdout
$stderr = original_stderr
@stdout = fake_stdout.string
@stderr = fake_stderr.string
これがうまくいくかどうかはわかりませんが...
于 2011-08-17T20:46:58.653 に答える
1
Why should the errors not be on stdout? Up to now I have no prepared solution to suppress the output for specific errors.
If you accept the unchanged output, I have a solution to store errors and failures in a file. It will be no problem to create a 2nd file for Notifications...
gem 'test-unit'
require 'test/unit'
module Test
module Unit
class TestSuite
alias :old_run :run
def run(result, &progress_block)
old_run(result, &progress_block)
File.open('test.log', 'w'){|f|
result.faults.each{|err|
case err
when Test::Unit::Error, Test::Unit::Failure
f << err.long_display
f << "\n===========\n"
#not in log file
when Test::Unit::Pending, Test::Unit::Notification, Test::Unit::Omission
end
}
}
end
end
end
end
class MyTest < Test::Unit::TestCase
def test_1()
assert_equal( 3, 1+1) #failure
end
def test_2()
1 / 0 #force an error
end
def test_3()
notify 'sss'
end
def test_4()
pend "MeineKlasse.new"
end
def test_5
omit 'aaa' if RUBY_VERSION == '1.9.2'
end
def test_5
assert_in_delta( 0.1, 0.00001, 1.0/10)
end
end
于 2011-08-17T22:32:35.553 に答える