【发布时间】:2014-08-01 22:44:48
【问题描述】:
Mock documentation 描述了一种简单而优雅的方法,可以将补丁应用到 TestCase 中的所有测试方法:
@patch('foo.bar')
@patch('foo.baz')
@patch('foo.quux')
@patch('foo.narf')
class FooTest(TestCase):
def test_foo(self, bar, baz, quux, narf):
""" foo """
self.assertTrue(False)
但是,我在使用此方法时遇到的一个问题是,如果我想在其中一种测试方法中的一个补丁上调用 stop(),似乎无论如何都无法获得参考到 patcher 对象——传递给方法的唯一东西是模拟对象,在本例中为 bar、baz、quux、narf。
我发现解决此问题的唯一方法是移至 Mock 文档中描述的模式,其中修补程序被实例化并在 TestCase 的 setUp 方法内启动并在 tearDown 内停止方法。这符合我的目的,但增加了很多额外的样板,并且不像类装饰器方法那样优雅。
还有其他方法可以解决这个问题吗?
【问题讨论】:
标签: python unit-testing mocking