无法使用unittest修补由测试的类实例化的类

sixtstorm1

我正在尝试修补由我要测试的类实例化的类,但是它不起作用。我已经阅读了各种文档,但仍然没有发现我做错了什么。这是代码片段:

tests/Test.py

from module.ClassToTest import ClassToTest

class Test(object):

    @mock.patch('module.ClassToPatch.ClassToPatch', autospec = False)
    def setUp(self, my_class_mock):
        self.instance = my_class_mock.return_value
        self.instance.my_method.return_value = "def"
        self.class_to_test = ClassToTest()

    def test(self):
        val = self.class_to_test.instance.my_method() #Returns 'abc' instead of 'def'
        self.assertEqual(val, 'def')

module/ClassToPatch.py

class ClassToPatch(object):
    def __init__(self):
        pass
    def my_method(self):
        return "abc"

module/ClassToTest.py

from module.ClassToPatch import ClassToPatch

class ClassToTest(object):
    def __init__:
        # Still instantiates the concrete class instead of the mock
        self.instance = ClassToPatch()

我知道在这种情况下,我可以轻松注入依赖项,但这只是一个例子。同样,我们对每个文件策略使用一个类,文件的名称类似于该类,因此使用了奇怪的导入命名。

伊森·弗曼(Ethan Furman)

正如诺伯特提到的,解决方法是将模拟行从

@mock.patch('module.ClassToPatch.ClassToPatch', autospec = False)

@mock.patch('module.ClassToTest.ClassToPatch', autospec = False)

根据文档

使用patch()装饰器/上下文管理器可以轻松模拟被测模块中的类或对象。在测试期间,您指定的对象将被模拟(或其他对象)替换,并在测试结束时恢复。

您正在测试ClassToTest模块,而不是ClassToPatch模块。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我是否需要创建要使用unittest测试的类的实例?

来自分类Dev

无法使用Hibernate createQuery实例化类

来自分类Dev

如何修补和验证类是否已使用特定参数实例化?

来自分类Dev

JUnit-使用参数中的对象测试类实例化

来自分类Dev

隔离类只能由特定的类实例化:最佳做法

来自分类Dev

使用类名实例化类的对象

来自分类Dev

无法使用 IOC contatiner laravel 实例化类

来自分类Dev

使用指针的类实例化

来自分类Dev

如何使用EasyMock模拟在测试类中实例化的类?

来自分类Dev

Laravel 5:无法使用修补程序实例化模型

来自分类Dev

如何修补由导入的类导入的函数?

来自分类Dev

WebDriver。使用参数化类后无法运行测试

来自分类Dev

在Python中修补类的所有实例

来自分类Dev

在python中模拟或修补类实例变量?

来自分类Dev

在Python中修补类的所有实例

来自分类Dev

无法在Android App中实例化类

来自分类Dev

无法实例化bean类:BeanInstantiationException

来自分类Dev

模拟-无法实例化属性的代理类?

来自分类Dev

NiftyGUI的Nifty类无法实例化?

来自分类Dev

渲染问题:无法实例化以下类

来自分类Dev

Kotlin脚本无法实例化类

来自分类Dev

无法实例化类的新对象

来自分类Dev

“无法实例化抽象类”错误

来自分类Dev

无法实例化bean类:BeanInstantiationException

来自分类Dev

PHP-无法动态实例化类

来自分类Dev

无法实例化main()中的嵌套类

来自分类Dev

无法实例化抽象类

来自分类Dev

无法从MSHTML库实例化HTMLXMLHttpRequest类

来自分类Dev

C ++无法实例化抽象类