首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抑制单位测试中的打印输出

抑制单位测试中的打印输出
EN

Stack Overflow用户
提问于 2014-06-10 06:31:24
回答 2查看 19K关注 0票数 33

编辑:请注意我正在使用Python2.6(作为标记)

说我有以下几点:

代码语言:javascript
复制
class Foo:
    def bar(self):
        print 'bar'
        return 7

并且说我有以下单元测试:

代码语言:javascript
复制
import unittest
class ut_Foo(unittest.TestCase):
    def test_bar(self):
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)

所以如果我跑:

代码语言:javascript
复制
unittest.main()

我得到:

代码语言:javascript
复制
bar # <-- I don't want this, but I *do* want the rest
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Exit code:  False

我的问题是:是否有一种方法可以在获得单元测试框架输出的同时抑制被测试对象的输出?

编辑这个问题并不是flagged question的重复,flagged question询问的是如何在普通python脚本中沉默特定函数的标准输出。

虽然这个问题是在运行python脚本时隐藏正常的stdout,但它是单元测试。我仍然希望显示单元测试的标准输出,并且我不想禁用测试脚本的stdout。

EN

回答 2

Stack Overflow用户

发布于 2014-06-10 06:42:22

使用选项"-b“调用您的单元测试-缓冲区标准输出和stderr

Foo.py

代码语言:javascript
复制
class Foo:
    def bar(self):
        print "bar"
        return 7

test.py

代码语言:javascript
复制
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选项运行它

代码语言:javascript
复制
$ python test.py -b
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

选择:使用nose

代码语言:javascript
复制
$ pip install nose

安装命令nosetests

请注意,我修改了测试套件,使其具有以test为前缀的类和方法,以满足nose默认测试发现规则。

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

代码语言:javascript
复制
$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

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

代码语言:javascript
复制
$ nosetests -s
bar
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
票数 46
EN

Stack Overflow用户

发布于 2020-08-28 10:05:38

您可以通过禁用sys.stdout并在测试完成后启用它来抑制输出:

代码语言:javascript
复制
import sys
import io
import unittest

class ut_Foo(unittest.TestCase):
    def test_bar(self):

        #You suppress here:
        suppress_text = io.StringIO()
        sys.stdout = suppress_text 
        
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)
        
        #You release here:
        sys.stdout = sys.__stdout__

这一切都是从:

https://codingdose.info/2018/03/22/supress-print-output-in-python/

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24134343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档