- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当使用 nosetest
进行测试时,每个测试用例的结果可以是“成功”、“失败”或“错误”。这将作为“.”、“F”和“E”写入 STDOUT。
有没有办法覆盖这个函数并打印出额外的调试信息?
附录
根据下面给出的信息,我创建了以下测试代码:
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
):
from nose.tools import assert_true
class TestSuite(object):
def test1(self):
assert_true(True)
import nose
from plugin1 import Plugin1
if __name__ == '__main__':
nose.main(addplugins=[Plugin1()])
但我仍然得到相同的结果。我想我必须以其他方式“注册”插件。但是怎么办? documentation在这一点上几乎不存在......
运行整个测试
python test1.py
产生相同的输出,但不是 plugin1.py
中给出的额外文本输出。
最佳答案
您可以使用 Nose
执行此操作plug-in framework .基本上,您的插件需要提供一个 addError
方法,该方法在测试错误时被调用。该方法获取传入的测试用例,您应该能够反省出了什么问题并在那里记录额外的调试信息。看看 TestTextResult和 ResultProxy类。
示例包含一个完整的插件,可将输出流 (HTMLPlugin) 修改为 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
只注册它不启用的插件--with-PLUGIN-NAME
才能实际使用它--with-PLUGIN-NAME
不能是 argv
中的第一个,因为传统上那是程序名称 --with-PLUGIN-NAME
标志获得一个自动名称,你可以覆盖名称,因此也可以覆盖 --with-SOMETHING
标志。stderr
,你还必须指定--nocapture
,否则nose
会阻塞标准输出(请注意 addSuccess
中的 print
未显示在输出中)setOutputStream
方法并存储对输出流的本地引用,或者可能在 __init__
期间设置您自己的输出流。setOutputStream
方法并且从中返回 None,其他插件可以使用相同的流。您可以返回一个虚拟流来抑制默认输出 ( https://nose.readthedocs.io/en/latest/plugins/writing.html#recipes )finalize
方法,并且只在那里打印输出,而不是在测试运行时 - addSucces
, addFailure
等在测试期间被调用,finalize
在所有测试完成后被调用。所有这些都应该在文档中。
关于python - 如何覆盖 nosetest 拆解功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48074049/
我最低限度地使用 pytest 作为针对工作中各种 API 产品的大型自动化集成测试的通用测试运行器,并且我一直在尝试寻找一个同样通用的拆卸函数示例,该函数在任何测试完成时运行,无论成功或失败。 我的
我不需要编码器,我已经有了 XML 文件。所以我在关注this guide查看如何解码 CDATA 中的内容。但是,我发现,如果我跳过 main 中的编码部分而只执行解码部分,它似乎不起作用。所以我的
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How do I stop name-mangling of my DLL's exported funct
产品岗在很多公司就是螺丝钉样的存在。不仅JAVA、UI、Axure得手到擒来,文案、手册、幻灯片还要充满情怀,连运营活动都似乎是产品的分内工作了 T_T 那么作为初级产品要怎么运营好一
我是 Python 新手。我有一个单例装饰器定义为: def singleton(cls): instances = {} def getinstance(): if
我正在努力构建基于 ggplot 对象的双轴图。根据巴蒂斯特的建议,我已将问题分解为更小的部分。目前的问题是: 如何从grobs中删除所有数据,同时保留轴、轴标签、轴刻度线和网格线?我的意思是与 ge
我有一个数据集,我在其中存储不同类/子类型的副本(不确定如何调用它),然后存储每个类/子类型的属性。本质上,有 5 个子类型/类,每个子类型/类有 4 个重复,以及测量的 100 个属性。 是否有像
我是一名优秀的程序员,十分优秀!