模拟的函数不检查参数
我有下面的代码。文件foo.py有:模拟的函数不检查参数
#!/usr/bin/python3 import time
class Foo():
def foo(self, num):
time.sleep (10)
return num + num
文件mock_test.py有:
#!/usr/bin/python3 from mock import patch
import foo
import unittest
class FooTestCase(unittest.TestCase):
@patch('foo.Foo.foo') # filename, classname, fn name
def test_one(self, mock_foo):
mock_foo.return_value = 'mock return value'
myobj = foo.Foo()
print (myobj.foo())
if __name__ == '__main__':
unittest.main()
和文件regular_test.py有:
#!/usr/bin/python3 import foo
import unittest
class FooTestCase(unittest.TestCase):
def test_one(self):
f = foo.Foo()
print (f.foo(20))
if __name__ == '__main__':
unittest.main()
现在,如果我跑regular_test.py,它检查传递给f.foo()的参数的数量,但mock_test.py没有这样的事情!模拟测试是否应该仅用于加速函数执行?如果我用0个参数或多个参数调用foo(),为什么不标记错误?
回答:
因为mock_foo
!= Foo.foo
。
mock_foo
是一种完全不同的实施Foo.foo
。当你嘲笑它时,你正在定义应该做什么。由于mock_foo
未设置为除了任何参数(您已将其设置为返回字符串),解释器不会抱怨缺少的参数。
不是模拟测试应该只是为了加速函数执行吗?
这种说法并不完全正确。以下是嘲讽的一个简单的例子:
def bar(): return rand.randint(0, 10)
def foo(num):
random = bar()
return num/random
我想测试foo
,但输出取决于bar
输出。如果bar()
返回1,输出是多少?或10?或0?为了测试是否foo
是正确的,我可以模拟bar()
返回预定值,所以我知道从foo()
期望什么。
我希望这是有道理的。
以上是 模拟的函数不检查参数 的全部内容, 来源链接: utcz.com/qa/258532.html