当前位置: 首页 > 面试题库 >

Python:编写用于控制台打印的单元测试

段干楚青
2023-03-14
问题内容

函数foo打印到控制台。我想测试控制台打印。我如何在python中实现呢?

需要测试这个功能,没有返回语句:

def foo(inStr):
   print "hi"+inStr

我的测试:

def test_foo():
    cmdProcess = subprocess.Popen(foo("test"), stdout=subprocess.PIPE)
    cmdOut = cmdProcess.communicate()[0]
    self.assertEquals("hitest", cmdOut)

问题答案:

您可以通过临时重定向sys.stdout到一个StringIO对象来轻松捕获标准输出,如下所示:

import StringIO
import sys

def foo(inStr):
    print "hi"+inStr

def test_foo():
    capturedOutput = StringIO.StringIO()          # Create StringIO object
    sys.stdout = capturedOutput                   #  and redirect stdout.
    foo('test')                                   # Call unchanged function.
    sys.stdout = sys.__stdout__                   # Reset redirect.
    print 'Captured', capturedOutput.getvalue()   # Now works as before.

test_foo()

该程序的输出为:

Captured hitest

说明重定向成功捕获了输出,并且您能够将输出流还原到开始捕获之前的状态。

请注意,上面的代码针对Python 2.7,如问题所示。Python 3稍有不同:

import io
import sys

def foo(inStr):
    print ("hi"+inStr)

def test_foo():
    capturedOutput = io.StringIO()                  # Create StringIO object
    sys.stdout = capturedOutput                     #  and redirect stdout.
    foo('test')                                     # Call function.
    sys.stdout = sys.__stdout__                     # Reset redirect.
    print ('Captured', capturedOutput.getvalue())   # Now works as before.

test_foo()


 类似资料:
  • 由来 编码中我们常常需要调试输出一些信息,除了打印日志,最长用的要数System.out和System.err 比如我们打印一个Hello World,可以这样写: System.out.println("Hello World"); 但是面对纷杂的打印需求,System.out.println无法满足,比如: 不支持参数,对象打印需要拼接字符串 不能直接打印数组,需要手动调用Arrays.to

  • 问题内容: 我想在用户调用/ button之后,简单地在Python控制台上打印一个“ hello world”。 这是我的幼稚方法: 背景:我想从flask(而不是shell)执行其他python命令。“打印”应该是最简单的情况。我相信我对这里的基本理解还不了解。提前致谢! 问题答案: 看来你已经解决了问题,但是对于其他寻求此答案的人来说,一种简单的方法是通过打印到stderr。你可以这样做:

  • 我在Visual Studio中有一个测试项目。我使用Microsoft.VisualStudio.TestTools.UnitTesting。 我在我的一个单元测试中添加了这一行: 当我运行测试时,测试通过,但控制台窗口根本没有打开。 有没有办法让控制台窗口可以通过单元测试进行交互?

  • 我对Spring boot和JUnit是新手。我在Spring Boot中有一个Rest服务,在那里我接收请求,使用请求参数查询数据库,从查询中接收结果并将其作为响应发送。 我的控制器代码如下所示: 我的JdbcTemplate被作为一个单独类中的bean处理,如下所示 我的代码运行良好。 现在我想使用JUnit4为我的控制器编写单元测试。我使用MockMvc发送请求,但我的单元测试从未起飞。它总

  • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担

  • 问题内容: 我的C程序粘贴在下面。在bash中,程序打印“ char is”,不打印Ω。我的语言环境均为en_US.utf8。 问题答案: 这很有趣。显然,编译器将omega从UTF-8转换为UNICODE,但libc某种程度上将其弄乱了。 首先:-format说明符期望一个(即使在wprintf -version 中也是如此),因此您必须指定(并因此指定字符串)。 其次,如果您像这样将语言环境设