如何使用Nose抑制失败的测试用例的痕迹?

and*_*ell 5 python testing nose nosetests

我正在写一个带鼻子的测试服,并希望失败的情况下显示输出

"失败:is_even(5):甚至没有"

而不是默认输出:

======================================================================
FAIL: seed_db.test_generator(5,)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/home/apurcell/tests/prism/seed_db.py", line 59, in is_even
    nose.tools.eq_(x % 2, 0, msg="Not even")
  File "/usr/local/lib/python2.7/dist-packages/nose/tools.py", line 31, in eq_
    assert a == b, msg or "%r != %r" % (a, b)
    AssertionError: Not even

----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

是否可以选择鼻子?

wag*_*eer 0

一种可能的解决方案是将错误流重定向到类似流的对象并在那里处理不同的输出。这可能类似于以下代码片段:

import sys

class MyErrorStream():
    def write(self, txt):
        # Do something if
        # output contains
        # special exception
        altered_txt = 'My special exception is:\n' + txt

        sys.__stderr__.write(altered_txt)

if(__name__ == '__main__'):
    error_stream = MyErrorStream()
    sys.stderr = error_stream

    assert(1 == 0)
Run Code Online (Sandbox Code Playgroud)

但这个解决方案并不是最好的解决方案。改变堆栈跟踪的另一种方法是修改处理输出的鼻子的内部类。您可以将其子类化并覆盖/扩展创建输出文本的方法。因为我没有使用鼻子,所以我无法给出最小的代码片段。尽管如此,我还是希望能够帮助你。