ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 在单元测试中抑制打印输出

2019-10-02 13:59:22  阅读:358  来源: 互联网

标签:python-unittest python-2-6 python


参见英文答案 > Silence the stdout of a function in Python without trashing sys.stdout and restoring each function call                                    8个
编辑:请注意我正在使用Python 2.6(标记为)

说我有以下内容:

class Foo:
    def bar(self):
        print 'bar'
        return 7

并说我有以下单元测试:

import unittest
class ut_Foo(unittest.TestCase):
    def test_bar(self):
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)

所以,如果我跑:

unittest.main()

我明白了:

bar # <-- I don't want this, but I *do* want the rest
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Exit code:  False

我的问题是:有没有办法抑制被测对象的输出,同时仍然得到unittest框架的输出?

编辑
这个问题不是flagged question的重复,它要求在普通的python脚本中沉默特定函数的stdout.

虽然这个问题是在运行它的单元测试时询问是否隐藏了python脚本的正常标准输出.我仍然希望显示unittest标准输出,我不想禁用我测试过的脚本的标准输出.

解决方法:

使用选项“-b”调用unittest – buffer stdout和stderr

Foo.py

class Foo:
    def bar(self):
        print "bar"
        return 7

test.py

import unittest
from Foo import Foo

class test_Foo(unittest.TestCase):
    def test_bar(self):
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)

if __name__ == "__main__":
    unittest.main()

使用-b选项运行它

$python test.py -b
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

替代方案:使用鼻子

$pip install nose

什么安装命令nosetests

请注意,我已经修改了测试套件,使其类和方法以test为前缀,以满足鼻子默认测试发现规则.

默认情况下,nosetests不显示输出

$nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

如果要查看输出,请使用-s开关:

$nosetests -s
bar
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

标签:python-unittest,python-2-6,python
来源: https://codeday.me/bug/20191002/1843209.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有