版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hguo11/article/details/82291419
新建文件
function.py
def add_and_multiply(x, y):
addition = x + y
multiple1 = multiply2(x, y)+multiply1(x,y)
return (addition, multiple1)
def multiply1(x, y):
return x * y+3
def multiply2(x, y):
return x * y+3
再新建一个文件func_test.py
import unittest
import function
from unittest.mock import patch
class MyTestCase(unittest.TestCase):
@patch("function.multiply1")
@patch("function.multiply2")
def test_add_and_multiply(self,mock_multiply1,mock_multiply2):
x = 3
y = 5
mock_multiply1.return_value = 15
mock_multiply2.return_value=15
addition, multiple= function.add_and_multiply(x, y)
self.assertEqual(8, addition)
self.assertEqual(30, multiple)
if __name__ == "__main__":
unittest.main()
这样就可以了,
上面的两个文件是在一个目录下的,但是我们的测试代码通常和主执行程序是要分开的,这样的话,就会出现如下的结构。
这样的话相应大代码就要做如下调整
func_test.py
import unittest
from unittest.mock import patch
from python import fun1
# from python.fun1 import multiply1,multiply2
class MyTestCase(unittest.TestCase):
@patch("python.fun1.multiply1")
@patch("python.fun1.multiply2")
def test_add_and_multiply(self,mock_multiply1,mock_multiply2):
x = 3
y = 5
mock_multiply1.return_value = 15
mock_multiply2.return_value=15
addition, multiple= fun1.add_and_multiply(x, y)
self.assertEqual(8, addition)
self.assertEqual(30, multiple)
if __name__ == "__main__":
unittest.main()
func1.py
def add_and_multiply(x, y):
addition = x + y
multiple1 = multiply2(x, y)+multiply1(x,y)
return (addition, multiple1)
def multiply1(x, y):
return x * y+3
def multiply2(x, y):
return x * y+3
这样就可以了,使用的是绝对路径。
对于如下的更加复杂的嵌套关系的话
其中代码如下
func_test.py
import unittest
from unittest.mock import patch
from python import fun1
# from python.fun1 import multiply1,multiply2
class MyTestCase(unittest.TestCase):
@patch("python.fun1.multiply1")
@patch("python.fun1.multiply2")
def test_add_and_multiply(self,mock_multiply1,mock_multiply2):
x = 3
y = 5
mock_multiply1.return_value = 15
mock_multiply2.return_value=15
addition, multiple= fun1.add_and_multiply(x, y)
self.assertEqual(8, addition)
self.assertEqual(33, multiple)#有改动
print('ojbk') #有改动
if __name__ == "__main__":
unittest.main()
可以看到代码没有变的 就是30变成了33 因为我后面要加3的
fun1.py
from .fun1sub import jia3
def add_and_multiply(x, y):
addition = x + y
multiple1 = multiply2(x, y)+multiply1(x,y)+jia3()
return (addition, multiple1)
def multiply1(x, y):
return x * y+3
def multiply2(x, y):
return x * y+3
fun1sub.py
def jia3():
return 3
这样是可以直接运行func_test的。
这里fun1.py中的from . import 这句话要注意,一般情况下在这个py文件中你直接运行这个py是不行的。
比如
但是如果要让另外一个函数调用它的话,是可以的,不知道为啥,为了保险的话还是用绝对路径from python.fun1sub import jia3比较好。
这个图片中报的错可以参考我另外一篇博客。