是否可以使用现有的Singleton实例修补类实例?

梅尼·伊萨科夫


我有一个表示我们的数据库层的类,该类在某些类中内部实例化(我不能将其作为外部参数传递)
,例如:

class MyClass(object):
    def __init__(self):
        self.dbapi = DatabaseAPI()
        self.timeout = 120

    def some_methods(self):
        pass

我们正在编写一些单元测试,并且我们想使用我们将在测试运行之前创建的现有实例来模拟self.dbapi。

例如:

my_dbapi = DatabaseAPIMock()
...
...
@patch('MyModule.DatabaseAPI', my_dbapi)
def my_test(self):
    my_class = MyClass() #<---This is where I'm not able to mock the DatabaseAPI

到目前为止,这是我试图实现的目标,但是从调试代码后,我看到self.dbapi是使用实际对象而不是使用预制的模拟实例化的。

我想念什么?
顺便说一句,我们正在运行python 2.7

提前致谢!

丹尼尔·罗斯曼

您正在修补错误的内容。您需要修补分配属性的模块,即包含目标类的模块。

如果在目标类中定义一个获取DatabaseAPI对象的方法会更容易。这样,您可以更轻松地对其进行修补。

class MyClass(object):
    def __init__(self):
        self.dbapi = self.get_db_api()
        self.timeout = 120

    def get_db_api():
        return DatabaseAPI()

测试变成:

@patch('my_module.MyClass.get_db_api')
def my_test(self, my_method):
    my_method.return_value = my_dbapi

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对现有的wordpress实例使用grunt

来自分类Dev

是否可以使用指针创建类的实例?

来自分类Dev

是否可以使用VBA自定义类的有状态默认实例?

来自分类Dev

是否可以使类的实例可调用

来自分类Dev

在Python中扩展现有的类实例

来自分类Dev

是否可以使用AWS CDK启动现有的ServiceCatalog产品?

来自分类Dev

是否可以使用终端在现有的配置文件中添加或删除UDID?

来自分类Dev

是否可以使用“iostream”包装现有的 TCP/OpenSSL 会话?

来自分类Dev

在Python中修补类的所有实例

来自分类Dev

在Python中修补类的所有实例

来自分类Dev

测试是否可以使用Activator实例化一个类类型而不实例化它

来自分类Dev

测试是否可以使用Activator实例化一个类类型而不实例化它

来自分类Dev

如何升级现有的graphenedb实例?

来自分类Dev

Kivy:是否可以使用类级别(而不是实例)Properties来触发事件?

来自分类Dev

是否可以使整个WPF应用程序都可以使用非静态类的实例?

来自分类Dev

是否可以使整个WPF应用程序都可以使用非静态类的实例?

来自分类Dev

一个类在Ruby中可以拥有的实例数量是否有限制?

来自分类Dev

使用现有的obj实例为我的模型类编写自定义管理器

来自分类Dev

使用构造函数类制作现有类实例的副本

来自分类Dev

是否可以使用unicode列实例化DataFrame?

来自分类Dev

是否可以使用键列表实例化Map?

来自分类Dev

是否可以使用App .__ container __。lookup访问实例?

来自分类Dev

是否可以使用jmeter SSH进入亚马逊实例

来自分类Dev

是否可以使用初始化列表实例化一个类并调用一个方法,所有这些都在单个命令中?

来自分类Dev

自动从同一类的实例更新现有的Class属性

来自分类Dev

为什么我可以创建多个Singleton实例,即使其构造函数是私有的?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

从现有实例创建新实例,新类实例更改现有类参数

Related 相关文章

  1. 1

    对现有的wordpress实例使用grunt

  2. 2

    是否可以使用指针创建类的实例?

  3. 3

    是否可以使用VBA自定义类的有状态默认实例?

  4. 4

    是否可以使类的实例可调用

  5. 5

    在Python中扩展现有的类实例

  6. 6

    是否可以使用AWS CDK启动现有的ServiceCatalog产品?

  7. 7

    是否可以使用终端在现有的配置文件中添加或删除UDID?

  8. 8

    是否可以使用“iostream”包装现有的 TCP/OpenSSL 会话?

  9. 9

    在Python中修补类的所有实例

  10. 10

    在Python中修补类的所有实例

  11. 11

    测试是否可以使用Activator实例化一个类类型而不实例化它

  12. 12

    测试是否可以使用Activator实例化一个类类型而不实例化它

  13. 13

    如何升级现有的graphenedb实例?

  14. 14

    Kivy:是否可以使用类级别(而不是实例)Properties来触发事件?

  15. 15

    是否可以使整个WPF应用程序都可以使用非静态类的实例?

  16. 16

    是否可以使整个WPF应用程序都可以使用非静态类的实例?

  17. 17

    一个类在Ruby中可以拥有的实例数量是否有限制?

  18. 18

    使用现有的obj实例为我的模型类编写自定义管理器

  19. 19

    使用构造函数类制作现有类实例的副本

  20. 20

    是否可以使用unicode列实例化DataFrame?

  21. 21

    是否可以使用键列表实例化Map?

  22. 22

    是否可以使用App .__ container __。lookup访问实例?

  23. 23

    是否可以使用jmeter SSH进入亚马逊实例

  24. 24

    是否可以使用初始化列表实例化一个类并调用一个方法,所有这些都在单个命令中?

  25. 25

    自动从同一类的实例更新现有的Class属性

  26. 26

    为什么我可以创建多个Singleton实例,即使其构造函数是私有的?

  27. 27

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

  28. 28

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

  29. 29

    从现有实例创建新实例,新类实例更改现有类参数

热门标签

归档