模拟的函数不检查参数

我有下面的代码。文件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

回到顶部