python-3.x 如何在父类中修补导入?

i34xakig  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(114)

我有这样的东西:

import load_json

class Parent:
    def func_1(self):
         file = load_json("file/path.json")
         file["additional data"] = "some new data"
         return file

子类:

class Child(Parent):
    def func_2(self):
        a = self.func_1()
        # do something with a
        return a

我想测试func_2,但它依赖于func_1 -专门加载一个文件。我还想模拟返回的json数据,因为函数2中有额外的逻辑,(1)我不想在测试中复制(2)我也想测试(即,如果依赖的逻辑发生变化,我希望这个测试失败)。所以,我想修补文件加载,但我不确定如何修补?
我假设它是这样的,但这只会给我一个“doesn 't give attribute 'load_json'”错误。

@patch("path.to.child.load_json", return_value={"my":"file contents"})
def test_func_2():
    c = Child()
    assert c.func_2() == "expected value"
h5qlskok

h5qlskok1#

好的,运行调试器来查看mock如何使用该路径,这将导致:

@patch("path.to.parent_file.load_json", return_value={...})

这似乎解决了这个问题。不知道怎么花了这么长时间才解决这个问题,但我假设如果需要在子文件导入的范围中指定。

相关问题