所以我的代码有问题。 文件1:
class Abc(object):
...
def function1(self):
#do something
def function2(self):
x = input()
return x+1
现在我正在尝试测试功能2,所以我为此编写了一个测试,但我不知道我做错了什么:
from unittest.mock import patch
import unittest
from file1 import *
class TestBackend(unittest.TestCase):
def test_mode_first(self):
self.assertEqual(Abc().funcion1(), 30)
@patch('funcion2.input', create=True)
def test_mode_second(self, mocked_input):
mocked_input.side_effect = ["QWE"]
result = Abc().funcion2()
self.assertEqual(result, 10)
if __name__ == '__main__':
unittest.main()
我得到ModuleNotFoundError:没有名为“ function2”的模块 所以我在这里做错了吗?
感谢您的帮助:)
答案 0 :(得分:0)
您得到mask1 = dataset.col2.str.len() > 1
mask2 = dataset.col1.ne('a')
dataset.assign(col2=dataset.col1.where(mask1 & mask2, dataset.col2))
col1 col2
0 a zz
1 b b
2 c c
3 xx a
4 yy b
是因为ModuleNotFoundError
不是一个模块。 patch doc
对此很清楚:
target应该是“ package.module.ClassName”形式的字符串。的 目标被导入,指定的对象被新的替换 对象,因此目标必须可从您所在的环境中导入 从调用patch()。装饰时导入目标 函数执行,而不是在装饰时执行。
在文件所在目录中用funcion2
执行时,这对我有用。
顺便说一句,您的示例中有几次错别字,例如python3 -m unittest discover
,请注意Abc().funcion2()
中缺少的t
。
此外,请尽量不要使用funcion2
:https://docs.quantifiedcode.com/python-anti-patterns/maintainability/from_module_import_all_used.html#using-wildcard-imports-from-import
from … import *
# file1.py
class Abc(object):
def function1(self):
return 30
def function2(self):
x = input()
return x + "1"