Python-单元测试,模拟,补丁,输入

时间:2018-11-06 13:01:17

标签: python unit-testing mocking return patch

所以我的代码有问题。 文件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”的模块 所以我在这里做错了吗?

感谢您的帮助:)

1 个答案:

答案 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

此外,请尽量不要使用funcion2https://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"