swa*_*wan 7 python unit-testing runner
我使用unittest并在每次测试后打印".","E"或"F"表示"ok","error"和"fail".我该如何关闭它?我使用Python 2.7,这些打印来自内置的转轮类.听起来非常难以覆盖类,因为它都是嵌套的.
编辑:我只想取下角色E. 和F因为它们与我的测试中的其他一些日志不同时出现.
Con*_*ius 10
输出将unittest写入标准错误流,您可以将其输出到其他位置.在*nix框中,这可能是这样的:
python -m unittest some_module 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
在Windows上,这应该是这样的(感谢Karl Knechtel):
python -m unittest some_module 2> NUL
Run Code Online (Sandbox Code Playgroud)
如果你从python运行测试,你可以简单地替换stderr流:
import sys, os
sys.stderr = open(os.devnull, 'w')
... # do your testing here
sys.stderr = sys.__stderr__ # if you still need the stderr stream
Run Code Online (Sandbox Code Playgroud)
由于您只想关闭.,F,E符号的更新,您还可以TestResult通过覆盖默认值来创建自己的类.在我的情况下(Python 2.6),这将是这样的:
import unittest
class MyTestResult(unittest._TextTestResult):
def addSuccess(self, test):
TestResult.addSuccess(self, test)
def addError(self, test, err):
TestResult.addError(self, test, err)
def addFailure(self, test, err):
TestResult.addFailure(self, test, err)
Run Code Online (Sandbox Code Playgroud)
这有效地关闭了字符的打印,但保持了默认功能.
现在我们还需要一个新TestRunner类并覆盖该_makeResult方法:
class MyTestRunner(unittest.TextTestRunner):
def _makeResult(self):
return MyTestResult(self.stream, self.descriptions, self.verbosity)
Run Code Online (Sandbox Code Playgroud)
有了这个跑步者,您现在可以享受无日志测试.
请注意:遗憾的是,命令行无法实现这一点.
有点迟到的反应,但有人可能会发现它很有用.你可以转.通过将详细级别设置为0来关闭E和F:
testRunner = unittest.TextTestRunner( verbosity = 0 )
Run Code Online (Sandbox Code Playgroud)
在stderr的测试结束时,您仍将获得最终结果和可能的错误/异常.
在Python 2.4和2.7中测试过.
根据您使用的单元测试框架(标准、nose...),您有多种方法来减少冗长:
python -m unittest -h
...
-q, --quiet Minimal output
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7553 次 |
| 最近记录: |