如何用Errbot修补(模拟)测试?

2024-06-01 04:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用errbot测试修补依赖项。我遇到的问题是errbot如何导入模块。它不是静态的,当我添加测试或者它们以不同的顺序测试时,它会破坏我的补丁装饰程序。你知道吗

我有一个叫EDB的插件(教育部). 内部教育部我用import pyedb导入pyedb。它位于我的site-packages。你知道吗

我有我的测试文件_教育部我试着像这样修补我的测试方法

pytest_plugins = ["errbot.backends.test"]
extra_plugin_dir = '.'

from unittest.mock import patch  # noqa: E402

@patch('yapsy_loaded_plugin_EDB_1.pyedb', autospec=True)
def test_edb_testlist(pyedb_mock, testbot):
    testbot.push_message('!edb testlist')

    assert "Okay, let me get..." == testbot.pop_message()
    assert "I don't see any..." == testbot.pop_message()

Errbot为模块导入添加了这个yapsy_loaded_plugin_EDB_<xx>路径,但是xx取决于测试的运行顺序。这不起作用,我需要一些静态导入路径mypath.pyedb。你知道吗

我希望有不同的方法来解决这个问题。也许我可以改变我导入模块的方式,这样它就不依赖于errbot导入了?你知道吗

这里有一个到Errbot testing的链接供参考。你知道吗


Tags: 模块testimportmessage顺序静态pluginmock
1条回答
网友
1楼 · 发布于 2024-06-01 04:19:12

我的解决方案感觉有点老套,但很管用。如果有人有更优雅的解决方案,请分享。如果没有其他回应,我会在一段时间后接受我自己的回答。你知道吗

所以我以前也遇到过这种情况,但我想我还是不太熟悉Python中的修补工作,因为我知道在哪里修补。在阅读了“Where to patch”文档(再次:)之后,我有了一个解决方法,即使用errbot进行动态导入。你知道吗

errbot项目文件夹看起来

errbot-project/
├── data/
│   ├── ...
├── plugins/
│   ├── plugin1/
|       ├── ...
|   ├── plugin2/
|       ├── ...

我注意到,当errbot运行项目目录../errbot-project和所有插件目录(例如../errbot-project/plugins/plugin1)时,它们都被添加到sys.path。你知道吗

所以我在我的项目目录中添加了一个包,并将其导入到我的插件中。然后我就可以从这个包中可靠地修补依赖项了。再次阅读Where to Patch文档以获得完整的解释。看起来像这样。你知道吗

errbot-project/
├── data/
│   ├── ...
├── plugins/
│   ├── plugin1/
|       ├── ...
|   ├── plugin2/
|       ├── ...
├── plugin_deps/
|       ├── __init__.py

我的../errbot-project/plugin_deps/__init__.py看起来像

...
import dep1
import dep2
...

然后在我的插件中我使用

...
import plugin_deps as pdep
...
def method():
    pdep.dep1.method()
...
# note, you cannot use 
# from plugin_deps import dep1
# this changes 'where' python looks up the module and
# and 'breaks' your patch 

最后我的测试代码看起来像

@patch('plugin_deps.dep1', autospec=True) 
def test_get_tl_tabulation(my_mock, testbot):
    # test code here

相关问题 更多 >