代码之家  ›  专栏  ›  技术社区  ›  MarkII

不同目录python测试文件中的模拟方法

  •  1
  • MarkII  · 技术社区  · 7 年前

    我试图模仿一种方法,但遇到了一些问题 mock 实际上覆盖了它。

    app/tests/test_file.py<-包含单元测试,当前使用:

    @mock.patch('app.method', return_value='foo')
    def test(self, thing):
        ...
        do some stuff with app/main/server.py 
        and get its response, assert a few values
        ...
        assert 'foo' is in return value of some stuff
    

    正在模拟的方法正由server.py调用的另一个文件调用。

    • app/main/server.py<-单元测试实际与什么交互
    • app/main/route.py<-调用模拟方法的位置
    • app/main/thing.py<-包含要模拟的方法

    这是使用python 2.7的,每个包都有一个init文件。父文件夹(app)包含每个类和方法的导入。我试过了 app.method 这不会带来问题,但不起作用。我试过了 thing.method ,引发错误。我试过了 app.main.thing.method 什么都不做。

    我已经在这个相同的测试套件中成功模拟了一个对象及其方法之一,但是这个对象是直接在server.py文件中创建和使用的。我想知道这是否是因为被调用的方法在链的最下面。嘲笑对我来说很神奇,尤其是在巨蟒身上。

    1 回复  |  直到 7 年前
        1
  •  0
  •   MarkII    7 年前

    经过更多的挖掘,最终发现它,将留给任何其他有问题的人(特别是因为它不容易谷歌的能力)。

    正如@gang指定的那样,完整路径应该可以工作,但是模块需要是调用方法的模块,而不是它所在的模块, as this person points out. . 使用@gang示例:

    @mock.patch('app.main.route.method')
    def test(self, mock_method):
        mock_method.return_value = 'foo'
        # call and assert