我想使用 python3 和 表现 ,使用BDD创建Hello World命令行应用程序。我的功能文件设置方式如下:
Feature: Hello World
Scenario: the program greets us
When I start the program
Then it prints "Hello World!"
在features/steps/hello.py
我的@Then
步骤的大纲是:
from behave import *
@then('it prints "{text}"')
def step_impl(context, text):
# what goes here???
如何测试程序的输出?如何捕获此测试的标准输出?
答案 0 :(得分:0)
检查print
输出的典型方法之一是劫持sys.stdout
并对其进行分析:
from StringIO import StringIO
import sys
real_stdout = sys.stdout
try:
mock_stdout = StringIO()
sys.stdout = mock_stdout
print "Hi there"
assert mock_stdout.getvalue() == "Hi there"
finally:
sys.stdout = real_stdout
当然,try / finally逻辑可能隐含在您使用的测试框架中。在unittest
中,它将是setUp
/ tearDown
;我不知道behave
,但它的文档很可能涵盖它。
答案 1 :(得分:0)
这是适用于行为的9000的想法:
我将stdout重定向到名为features/environment.py
的文件中的模拟:
import sys
import io
def before_all(context):
context.real_stdout = sys.stdout
context.stdout_mock = io.StringIO()
sys.stdout = context.stdout_mock
def after_all(context):
sys.stdout = context.real_stdout
然后在features/steps/hello.py
中断言模拟标准输出的内容:
@then('it prints "{text}"')
def step_impl(context, text):
output = context.stdout_mock.getvalue()
assertEqual( "Hello World!\n", output )