python-3.x 如何为输入函数编写unittest.mock?

k10s72fa  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(128)

测试的主要功能:

async def start_script():
    script = int(input("Введите:\n1 для запуска парсера видео\n2 для запуска загрузчика видео: \n"))
    if script == 1:
        number = int(input("Введите количество видео для парсинга: "))
        # await main.info_videos(number=number)
    elif script == 2:
        number_pc = int(input("Введите номер ПК: "))
        count_video = int(input("Количество повторных публикаций: "))
        print("Введите диапазон времени для публикации (в минутах)")
        number1 = int(input("От (в минутах): "))
        number2 = int(input("До (в минутах): "))
        await get_video_process(number1, number2, number_pc, count_video)
    else:
        print("Ошибка ввода!")
        await start_script()

asyncio.run(start_script())

字符串
此代码的Unittest:

import unittest
from unittest.mock import patch

from web import start_script

class TestStartScript(unittest.TestCase):
    @patch("builtins.input", side_effect=["1", "5"])
    def test_start_script(self, mock_input):
        self.assertIsNone(start_script())

if __name__ == "__main__":
    unittest.main()


在我运行这个测试后,它启动了,但等待控制台输入,即使它应该自动完成。所以脚本停在一个地方,只是等待数据输入。如何解决这个问题?Console

agxfikkp

agxfikkp1#

您可以简单地替换这一行:

asyncio.run(start_script())

字符串
使用:

if __name__ == 'main':
    asyncio.run(start_script())


并将测试函数更改为:

@patch("builtins.input", side_effect=["1", "5"])
def test_start_script(self, mock_input):
    self.assertIsNone(asyncio.run(start_script()))

相关问题