Python 如何覆盖nosetest拆卸功能?
使用Python 如何覆盖nosetest拆卸功能?,python,unit-testing,nose,Python,Unit Testing,Nose,使用nosetest进行测试时,每个测试用例的结果可以是“成功”、“失败”或“错误”。这将作为“.”、“F”和“E”写入标准输出 F E 是否有方法覆盖此函数并打印其他调试信息 附录 根据下面给出的信息,我创建了以下测试代码: from nose.tools import assert_true from nose.plugins import Plugin class Tester(Plugin): def addSuccess(self, test): pr
nosetest
进行测试时,每个测试用例的结果可以是“成功”、“失败”或“错误”。这将作为“.”、“F”和“E”写入标准输出
- F
- E
from nose.tools import assert_true
from nose.plugins import Plugin
class Tester(Plugin):
def addSuccess(self, test):
print("Test successful")
def addError(self, test, err):
print("Had error: %s" % err)
def addFailure(self, test, err):
print("Had failure: %s" % err)
class TestSuite(object):
def test1(self):
assert_true(True)
但是,当我使用运行这个示例测试时,不会生成额外的输出
nosetests --nologcapture -s test1.py
我是否需要以某种方式“注册”该插件
附录2:
我创建了一个包含以下内容的文件plugin1.py
:
import os
from nose.plugins import Plugin
class Plugin1(Plugin):
def addSuccess(self, test):
print("Test successful")
def addError(self, test, err):
print("Had error: %s" % err)
def addFailure(self, test, err):
print("Had failure: %s" % err)
def options(self, parser, env=os.environ):
super(Plugin1, self).options(parser, env=env)
def configure(self, options, conf):
super(Plugin1, self).configure(options, conf)
测试脚本如下(test1.py
):
但我还是得到了同样的结果。我想我必须以其他方式“注册”插件。但是怎么做呢?关于这一点的讨论几乎不存在
通过运行整个测试
python test1.py
产生相同的输出,但不是
plugin1.py
中给出的额外文本输出。您可以使用nose
进行此操作。基本上,插件需要提供一个addError
方法,当测试出错时调用该方法。该方法获取传入的测试用例,您应该能够反思出了什么问题,并在那里记录额外的调试信息。看一看课程和课程
这些示例包含一个完整的插件,该插件将输出流()修改为html格式
更新 文件确实很糟糕。这是我拼凑的
import sys
from nose.tools import assert_true
import nose
from nose.plugins import Plugin
class Plugin1(Plugin):
def __init__(self):
self.reports = []
# self.name = 'mega-plugin'
super(Plugin1, self).__init__()
def addSuccess(self, test):
print('Test successful')
self.reports.append("Test successful")
self.stream.writeln("Test successful")
def setOutputStream(self, stream):
self.stream = stream
return None
def finalize(self, result):
for t in self.reports:
self.stream.writeln('finalize - ' + t)
class TestSuite(object):
def test1(self):
assert_true(True)
if __name__ == '__main__':
nose.main(argv=sys.argv + ['--with-plugin1'], addplugins=[Plugin1()])
从中得到的结果是
Test successful
.
----------------------------------------------------------------------
Ran 1 test in 0.003s
OK
finalize - Test successful
以下是几点观察:
addplugins
只注册插件,不启用插件——才能实际使用它
argv
中,带有插件名的--不能是第一个,因为传统上它是程序名
——使用插件名
标志,您可以用某种东西标志覆盖名称,从而覆盖
stderr
,则还必须指定--nocapture
,否则nose
将阻止stdout(请注意,addSuccess
中的print
未显示在输出中)setOutputStream
方法并存储对输出流的本地引用,或者在\uuuuu init\uuuuu
期间设置您自己的输出流setOutputStream
方法并且没有从中返回任何内容,那么其他插件可以使用相同的流。您可以返回一个伪流以抑制默认输出()finalize
方法,并且只在那里打印输出,而不是在测试运行时-addSucces
,addFailure
等。在测试期间调用,finalize
在所有测试完成后调用所有这些都应该在文档中。您还需要什么额外的信息?对于失败的测试,nose也会显示堆栈跟踪,谢谢您的提示,但是如何让它工作呢?我在测试脚本中创建了一个插件类,但是输出没有改变。如何使用这样的插件?您可以使用
argv=sys.argv+['--with-plugin1']
,这样仍然可以在命令上传递命令行参数line@MattiLyra:谢谢你明确的例子,但它对我不起作用。我尝试使用nosetest-s test1.py
和nosetests test1.py
以及python test1.py
运行脚本。我仍然得到原始的未更改的输出。它看起来根本没有执行“main”部分(当使用nosetests
时),我以python test1.py
的形式运行它,它确实工作了。我使用的是nose-1.3.7
和python-3.5.2
-调用nosetest
将无法工作,因为这将跳过您已经发现的.main
运行程序。您能否打开--nocapture
并插入一些print
语句以查看是否调用了任何内容?
Test successful
.
----------------------------------------------------------------------
Ran 1 test in 0.003s
OK
finalize - Test successful