在pytest函数中使用subprocess.run()会导致任何测试问题吗?

2024-05-14 04:13:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下Python模块要测试:

import sys

def greet():
    print(f"Hello, {sys.argv[1]}!") 

我已将其设置为脚本入口点,以便:

$ greet World
Hello, World!

现在,我想用pytest进行测试

它使用以下内容创建tests/test_greet.py文件:

import subprocess

import greet

def test_greet_cli():
    result = subprocess.run(["greet", "World"], capture_output=True)
    assert b"Hello, World!" in result.stdout

这会引起什么问题吗

<> P>有其他的测试方法,我应该考虑吗?

请随意浏览my article,我在其中记录了类似于上述内容的内容。我在那篇文章中建议了两种编写测试的方法,其中之一就是这种方法。如果它会引起任何问题,我不想把它包括在内


Tags: 模块方法testimport脚本内容helloworld
1条回答
网友
1楼 · 发布于 2024-05-14 04:13:04

你的根本问题是这个函数

def greet():
    print(f"Hello, {sys.argv[1]}!") 

当涉及到可测试性时,它是“坏的”,因为它依赖于全局变量。更好的版本应该是:

def greet(args=None):
    if args is None:
        args = sys.argv
    print(f"Hello, {args[1]}!") 

这将具有相同的功能,但更易于测试

相关问题 更多 >