如何在python中传递魔法模拟引用main方法

时间:2017-12-07 21:55:35

标签: python unit-testing mocking

我试图在main函数中构造类,以便我可以测试main并断言用特定数据初始化类。但是主函数仍然没有获取模拟的实例。如何将模拟的实例传递给main。

def test_main():
    magic_b = MagicMock(spec_set=Benchmark, wraps=Benchmark)
    with use_mocked("__new__", DataStream, magic_b):
        main.main()
        magic_b.assert_called_once_with() # fails

这是修补实用程序,以确保main传递模拟引用。我可能会对我对其功能的理解感到困惑。

import benchmark.Benchmark
def main():
    b = benchmark.Benchmark() # <- this is not the mocked instance
    ...

在主模块中,我有一个主要方法定义为...

{{1}}

1 个答案:

答案 0 :(得分:0)

我依赖于unittest.mock中的相同补丁实用程序,而只是在我的测试中以装饰器的形式使用它。 patch()现在在Benchmark类中传递,主要导入(在主要版本而非基准模块中进行修补非常重要,因为它自己即不修补benchmark.Benchmark )。主要模块保持不变,测试现在通过。

import main

@patch("main.Benchmark")
# b here is a ref to MagicMock class mocking Benchmark;
# it is substituted into the execution of main module,
# patch provides it as a param so you can assert against it.
def test_main(b): 
    main.main()
    b.assert_called_once_with()