首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pytest Fizzbuzz代码

Pytest Fizzbuzz代码
EN

Stack Overflow用户
提问于 2017-06-15 13:56:13
回答 2查看 597关注 0票数 0

我有这个fizzbuzz代码,但是作为一个pytest初学者,我很难想出如何测试它:

代码语言:javascript
运行
复制
def fizzbuzz(nn): 
    for num in range(1,nn+1):
        if num % 3 == 0 and num % 5 == 0:
            print "FizzBuzz"
        elif num % 3 == 0:
            print "Fizz"
        elif num % 5 == 0:
            print "Buzz"
        else:
            print  num

我想测试fizzbuzz(3) =‘Fizz’和fizzbuzz(7)== 7--请帮帮我。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-15 14:06:45

通常,如果您考虑如何在编写代码的同时测试代码,那么测试就容易得多。在这种情况下,您可以通过允许输出到stdout以外的地方来简化测试。

从cStringIO导入StringIO导入系统

代码语言:javascript
运行
复制
def fizzbuzz(nn, out=sys.stdout): 
    for num in range(1,nn+1):
        if num % 3 == 0 and num % 5 == 0:
            out.write("FizzBuzz\n")
        elif num % 3 == 0:
            out.write("Fizz\n")
        elif num % 5 == 0:
            out.write("Buzz\n")
        else:
            out.write("{}\n".format(num))

def test_three():
    out = StringIO()
    fizzbuzz(3, out)
    assert out.getvalue() == "1\n2\nFizz\n"

def test_seven():
    out = StringIO()
    fizzbuzz(7, out)
    assert out.getvalue() == "1\n2\nFizz\n4\nBuzz\nFizz\n7\n"

fizzbuzz(3)不应该只生产Fizz。如果要测试单个值的输出,现在需要重构。例如,您可以选择这样编写代码:

代码语言:javascript
运行
复制
import sys

def fizzbuzz_num(num, out=sys.stdout): 
    if num % 3 == 0 and num % 5 == 0:
        return "FizzBuzz"
    elif num % 3 == 0:
        return "Fizz"
    elif num % 5 == 0:
        return "Buzz"
    else:
        return str(num)

def fizzbuzz(nn, out=sys.stdout): 
    for num in range(1,nn+1):
        out.write(fizzbuzz_num(num) + "\n")

def test_three():
    assert fizzbuzz_num(3) == "Fizz"

def test_seven():
    assert fizzbuzz_num(7) == "7"

对于这样一个简单的代码块,可能会过度使用,但是模块化在测试方面确实有帮助。

票数 1
EN

Stack Overflow用户

发布于 2017-06-15 14:20:25

值得注意的是,如果您希望pytest运行程序自动获取测试文件和测试函数,则必须以" test“一词开始(或结束)。您还需要重构您的函数以return答案,而不是打印它。如果您真的想打印这些项,可以只调用print fizzbuzz(3)而不是调用fizzbuzz(3)。但是对于测试,您需要return值。您不必花时间测试python的print函数:它工作得很好。

假设您已经正确安装了pytest,您可以从命令行调用它,如下所示:

代码语言:javascript
运行
复制
python -m pytest test_fizz_buzz.py

具有如下所示的test_fizz_buzz.py文件:

代码语言:javascript
运行
复制
def test_fizz_buzz():
    assert fizzbuzz(3) == "Fizz"

def test_fizz_buzz():
    assert fizzbuzz(7) == 7

您应该看到输出(类似于以下内容):

代码语言:javascript
运行
复制
 python -m pytest test_fizz_buzz.py
=============================================== test session starts ===============================================
platform linux2 -- Python 2.7.12, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /home/messersmithm, inifile:
collected 2 items

test_fizz_buzz.py ..

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

https://stackoverflow.com/questions/44569418

复制
相关文章

相似问题

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