Python 有没有办法对终端上的多个打印进行单元测试?

Python 有没有办法对终端上的多个打印进行单元测试?,python,unit-testing,testing,pytest,Python,Unit Testing,Testing,Pytest,我目前在单元测试一个在多行上有多个打印的函数时遇到问题: def state_game(grid, score): print(grid[0]) print(grid[1]) print(grid[2]) print(grid[3]) print(f"Your score is {score}") return('------------') 我试图做的是测试每一行的打印是否在python终端上打印的行是正确的。到目前为止,

我目前在单元测试一个在多行上有多个打印的函数时遇到问题:

def state_game(grid, score):

    print(grid[0])
    print(grid[1])
    print(grid[2])
    print(grid[3])
    print(f"Your score is {score}")
    return('------------')
我试图做的是测试每一行的打印是否在python终端上打印的行是正确的。到目前为止,我已经尝试了以下方法来捕获终端上打印的内容:

import unittest
from unittest.mock import patch
"defining grid"
"defining score"
def test_state_game(self, mock_print):
         state_game(grid, score)
         mock_print.assert_called_with(grid[0])
         mock_print.assert_called_with(grid[1])
         mock_print.assert_called_with(grid[2])
         mock_print.assert_called_with(grid[3])
         mock_print.assert_called_with(f"Your score is {score}")
问题在于,当它第一次测试网格[0]是否打印在终端上时,当打印“您的分数为{score}”时(即state_game函数的最后一次打印),测试失败,显示预期的网格[0]。有什么想法吗?

你可以试试这个:

从unittest导入模拟
def测试状态游戏(自我):
#“模块”是定义“状态游戏”的地方
使用mock.patch(“module.print”)作为print\u mock:
国家队比赛(方格,得分)
打印\u mock.assert\u调用\u(网格[0])
打印\u mock.assert\u调用\u(网格[1])
打印\u mock.assert\u调用\u(网格[2])
打印\u mock.assert\u调用\u(网格[3])
用(f“您的分数是{score}”)打印\u mock.assert\u调用\u

这是否回答了您的问题?不,你提出的解决方案适用于其他例子。用户没有在终端上测试多个打印。这会引发断言错误(与我在第一条评论中提到的错误相同)。我不知道是否有任何方法可以做我想做的事…你能给我确切的回溯吗?