【问题标题】:mocking/patching an object of a different function模拟/修补不同功能的对象
【发布时间】:2016-01-26 20:02:56
【问题描述】:

假设我有

def foo:
    return a()

def bar:
    someObject = someObjectFactory()
    if someObject.field: 
       #do something

如果我想在调用 foo 时更改 someObject.field 的值怎么办? Foo 是一个测试,基本上我希望能够更改 someObject.field 以测试不同的值。

编辑:bar 和 foo 在不同的文件中

【问题讨论】:

  • 从你贴的代码看,foo和bar的关系还不清楚。尽管如此,还是尝试了一个有用的答案。
  • 我强烈怀疑你需要看看mock框架并花一些时间阅读Where to patch章节。

标签: python unit-testing mocking patch


【解决方案1】:

只需在bar()foo() 之外创建类,以便foo() 可以修改它。

someObject = someObjectFactory()

def foo():
    someObject.field = "something"
    return a()

def bar():
    if someObject.field:
        # code

【讨论】:

  • 如果 bar 和 foo 在不同的文件中怎么办?
  • @Articuno 这不是一个真正的问题,但您应该编写一个您想做的简单可运行示例。否则无法回答。
【解决方案2】:

由于您从 someObjectFactory 获取 someObject,一个可能的解决方案是(对于单元测试场景)修改 someObjectFactory / 提供 someObjectFactory 的特定于测试的实现,以便它为 bar 的每个测试返回一个具有正是该测试所需的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多