我需要测试一个处理输入的函数。我在单元测试和模拟方面都是新手,因此我基本上只是遵循这个答案https://stackoverflow.com/a/21047132/6531256,它看起来与我的情况非常相似。 好吧,问题在于,当我运行测试时,它似乎开始了,但是只是停留在那里而没有任何反应。我需要退出ctrl-c才能停止它,然后我得到的回溯没有太大帮助(至少对我而言)。
这是测试代码:
ERROR: more than one row returned by a subquery used as an expression
********** Error **********
ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000
这里是要测试的功能:
activity.recreate(
以下是回溯的一个示例(总是有些不同):
import unittest
import unittest.mock
from unittest.mock import patch
from work1 import User
class TestWork1(unittest.TestCase, User):
@patch('builtins.input', return_value= "36")
def test_userNum(self,return_value):
self.assertEqual(self.userNum(), "Invalid number. Put a 4-digit number:")
if __name__ == "__main__":
unittest.main()
有什么问题吗?
答案 0 :(得分:1)
您的代码有几个问题:
builtin.input
进行了修补以始终返回"36"
。这将不允许循环退出-当您运行代码时,似乎什么也没发生,但是代码只是循环而已。要查看会发生什么,可以将print()
语句放在有趣的地方。要解决此问题,您必须定义return_value
使其返回4位数字,或者必须将side_effect
定义为类似于["36", "1234"]
的列表,以便连续调用{ {1}}返回不同的值。后一个选项显示在下面的代码示例中。builtin.input
的结果与字符串进行比较。但是,self.userNum()
不返回任何内容。从测试代码看来,您似乎想测试self.userNum()
是用各自的参数字符串调用的。下面的代码显示了如何完成此操作-作为一种可能的解决方案,其中实际上检查了对buitin.input
的整个调用序列。这仅是为了演示,并不意味着应该这样做。可能的解决方案:
builtin.input