代码之家  ›  专栏  ›  技术社区  ›  Николай СероуÑ

如何为输入函数编写unittest.mock?

  •  1
  • Николай Ð¡ÐµÑ€Ð¾ÑƒÑ  · 技术社区  · 2 年前

    测试的主要功能:

    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

    1 回复  |  直到 2 年前
        1
  •  0
  •   user19315471    2 年前

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

    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()))