模拟/修补不同功能的对象

时间:2016-01-26 20:02:56

标签: python unit-testing mocking patch

假设我有

def foo:
    return a()

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

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

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

2 个答案:

答案 0 :(得分:0)

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

someObject = someObjectFactory()

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

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

答案 1 :(得分:0)

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