8

これが私のコードです:

import unittest
import sys
import os

class DemoTest(unittest.TestCase):
    def test_one(self):
        print "test one"
        self.assertTrue(True)

    def test_two(self):
        print "test two"
        self.assertTrue(False)

if __name__ == '__main__':
    dirpath = os.path.dirname(os.path.abspath(__file__))
    sys.stdout = open(dirpath+'/test_logs/demo_test.stdout.log', 'w')
    sys.stderr = open(dirpath+'/test_logs/demo_test.stderr.log', 'w')
    test_program = unittest.main(verbosity=0, exit=False)

これを実行すると、の内容は次のようになりますdemo_test.stdout.log

test one
test two

画面にはまだunittestからの出力が表示されます。

======================================================================
FAIL: test_two (__main__.DemoTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "demotest.py", line 12, in test_two
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 2 tests in 0.000s

FAILED (failures=1)

画面に出力がなく、すべてがログに記録されるようにしたい。(私はcronジョブとしてテストを実行しているので、stdoutまたはstderrに出力すると電子メールが送信されるので、これがいつ発生するかを正確に指定できるようにしたいので、これでユニットテストを制御できる必要があります由来。)

4

2 に答える 2

13

stderrをリダイレクトします。例:

python my_unit_test_launcher.py 2> log.txt
于 2013-01-09T20:47:50.417 に答える
9

テストコード内でそれを解決するには、次のこともできます。

import sys
import unittest

class DemoTest(unittest.TestCase):
    def test_one(self):
        print "test one"
        self.assertTrue(True)

    def test_two(self):
        print "test two"
        self.assertTrue(False)

if __name__ == "__main__":
    demo_test = unittest.TestLoader().loadTestsFromTestCase(DemoTest)
    unittest.TextTestRunner(stream=sys.stdout).run(demo_test)
于 2014-03-28T10:28:52.177 に答える