【问题标题】:Testing Discord.py bot with another Discord.py bot / Mocking用另一个 Discord.py 机器人测试 Discord.py 机器人 / 模拟
【发布时间】:2021-01-01 21:55:58
【问题描述】:

所以,我正在尝试对我的机器人进行单元测试,但我遇到了一个问题。起初,我以为我会为我拥有的命令编写 UnitTests。在做了一些研究之后,我得出结论,要实现这一点 - 我必须基本上模拟一切:ctx、服务器、机器人、数据库(可能)等等。然后我有了天才的想法,使用另一个机器人调用第一个机器人中的命令并查看我得到的答案,但是在尝试并未能实现之后:机器人从另一个机器人接收消息,将消息发送到:

await client.process_commands(message)

它应该将消息识别为命令并运行它,但我尝试过的一个命令都没有被激活,所以我得出结论,机器人可能无法激活其他机器人命令。

所以我的问题基本上是: 如果可以,机器人可以向其他机器人发送命令 - 如何实现? 如果嘲笑是唯一的方法 - 我应该从哪里开始,有没有人已经做过任何例子或者可以指出我正确的方向?

【问题讨论】:

    标签: python testing discord


    【解决方案1】:

    我觉得这有点奇怪。您介绍的方法不是单元测试,而是集成测试。单元测试仅检查单个功能,单元,分开。我认为您不应该尝试模拟这么多不同的依赖项。只需编写适当的集成测试来检查许多部分是否可以很好地协同工作。

    【讨论】:

      【解决方案2】:

      我假设您在机器人上没有直接的 on_message 事件。 (不是Cog.listener,而是bot.event

      在这种情况下,dpy 的默认 on_message 处理程序忽略所有机器人消息,这是可取的,但在您的情况下,您可以使用类似于以下内容的内容覆盖处理程序:

      @bot.event
      async def on_message(message:discord.Message):
          if message.author.bot and message.author.id != TESTER_BOT_ID: # Replace this
              return
          await bot.process_commands(message)
      

      确保将 TESTER_BOT_ID 替换为您用于测试的机器人的用户 ID。

      这只允许该机器人与您的机器人交互,而其他机器人最终会被忽略。

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2021-05-03
        • 2021-02-16
        • 2021-10-07
        • 2021-03-29
        • 2021-10-20
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多