0

我有以下情况:

mixin_foo.py
   class Foo:
      def doFoo(self):
        bar=self.defined_elsewhere()
        #....do work

单元测试:

@patch('path_to_mixin_foo.mixin_foo.Foo.defined_elsewhere')
def test_do_foo(self, definedElsewhere)
    definedElsewhere.return_value = bar1
    self.FooTester.doFoo()

defined_elsewhere() 方法是在派生自该 mixin 的类中定义的。但是,出于开发目的,在将它与类集成之前,我们首先处理 mix_foo.Foo。但是,当我尝试对 doFoo 方法进行单元测试时,pytest 显示以下错误:Attributeerror <....> 没有属性“defined_elsewhere”。我的补丁是否正确,是否有其他方法可以对该方法进行单元测试?基本上我想模拟 self.defined_elsewhere 的调用/返回值,以便可以测试 doFoo 方法。

4

1 回答 1

1

您的方法的问题是您尝试修补不存在的属性。您无法修补defined_elsewhere,因为它未在 中定义Foo,但您可以从 派生Foo、添加方法并修补Foo类:

class TestFoo(path_to_mixin_foo.Foo):
    def do_something(self):
        return bar1


@patch('path_to_mixin_foo.mixin_foo.Foo', TestFoo)
def test_do_foo(self)
    self.FooTester.doFoo()
于 2020-04-09T18:43:35.887 回答