Closed zhanbao2000 closed 1 year ago
所有nonebot相关import全都要在函数内部进行
第一个问题.env配置加载,你确定你的测试工作目录里是否有你要加载的.env?.env需要在你pytest启动的目录
第一个问题.env配置加载,你确定你的测试工作目录里是否有你要加载的.env?.env需要在你pytest启动的目录
.env文件确实不在pytest的启动目录下,而是在整个项目的根目录下,应该就是这个原因导致.env没有被加载。
我的项目结构大概这样:
│ .env
│ bot.py
│
├─src
│ ├─plugins
│ │ └─calculator
│ │ main.py
│ │ __init__.py
│ │
│ ├─plugins_preload
│ └─utils
└─unittest
│ helper.py
│
├─plugins
│ test_calculator.py
│
├─plugins_preload
└─utils
稍后我尝试一下有没有合适的方法可以在测试的时候令nonebug载入给定的.env,如果你有好的见解也希望可以告诉我,谢谢
所有nonebot相关import全都要在函数内部进行
已经了解了,经过尝试,若将 test_t4 改成这样就能通过
@pytest.mark.asyncio
async def test_t4(app: App, load_plugin):
from src.plugins.bug import t4
from nonebot.adapters.onebot.v11 import Message, MessageEvent
async with app.test_matcher(t4) as ctx:
bot = ctx.create_bot()
msg = Message("/t4")
event = MessageEvent(
user_id=1, message=msg, message_id=1, time=1, self_id=1, post_type="message",
message_type="private", sub_type="friend", raw_message=str(msg), font=1, sender={}
)
ctx.receive_event(bot, event)
ctx.should_call_send(event, "test4 ok", True)
ctx.should_finished()
稍后我尝试一下有没有合适的方法可以在测试的时候令nonebug载入给定的.env
直接在 bot 项目目录下添加 run_test.py
即可
│ .env
│ bot.py
│ run_test.py
│
├─src
│ ├─plugins
│ │ └─calculator
│ │ main.py
│ │ __init__.py
│ │
│ ├─plugins_preload
│ └─utils
└─unittest
│ helper.py
│
├─plugins
│ test_calculator.py
│
├─plugins_preload
└─utils
run_test.py
:
import pytest
if __name__ == '__main__':
pytest.main(['-v', 'unittest'])
直接在项目目录运行pytest unittest就可以
直接在项目目录运行pytest unittest就可以
谢谢,学到了
描述
在对
on_command
事件响应器进行测试时,无论.env
文件中COMMAND_START
设置如何,均需要在测试时对给定的测试消息添加/
前缀才能正常进行测试,否则should_call_send
、should_finished
等测试均不符合预期。在已对测试消息添加
/
前缀的情况下继续测试,若被handle
装饰器装饰的函数(我称其为处理函数)设置了event
形参,并通过 typing hint 将event
形参的类型指定为MessageEvent
,那么should_call_send
、should_finished
等测试均依然不符合预期。具体不符合预期的表现详见复现步骤和结果。
版本
nonebot2
: 2.0.0rc3nonebug
: 0.2.3pytest
: 7.2.1pytest-asyncio
: 0.16.0复现
插件:
src/plugins/bug/__init__.py
单元测试:
unittest/plugins/test_bug.py
环境:
.env
结果
预期
5 个测试均成功
实际
/t1
async def _():
t1
async def _():
/t2
async def _(event):
/t3
async def _(event: Event):
/t4
async def _(event: MessageEvent):
具体表现为:在未通过的两个测试中,无论测试用例填写什么预期结果,
should_finished
方法都总是能通过。而should_finished
方法则总是无法通过。日志
额外补充
使用
查看 Nonebug 的配置文件,可以得到:
这与给定的
.env
明显不符,这应该是导致第一个问题的原因