gpt4 book ai didi

python - 在 Python 中测试类的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 18:53:07 25 4
gpt4 key购买 nike

有一个类名为 State它有几个属性,我需要为其编写单元测试。测试需要有一些改变 State 属性值的 Action 。实例。预期参数位于字典内。单元测试将比较 State 的属性实例与字典的值相等。
问题是保持比较逻辑的最佳位置是什么?一世
正在考虑2个选项:

  • 添加 __eq__ State 的方法包含比较逻辑的类。
  • 在包含比较逻辑的测试模块内添加辅助函数。

  • 哪个选项更好,为什么?

    最佳答案

    外部。 __eq__应该(在大多数情况下)不用于将特定对象与 dict 进行比较并给出相等性。预期的行为是启用相同(或继承)类型的对象之间的比较。如果您正在寻找与 State 进行比较的方法对象,它可能很有用 - 但根据您的描述,这里似乎并非如此。
    我也会小心使用 __eq__如果这些测试没有明确地测试相等性,而是针对某些属性,则用于特定测试。 __eq__ 的 future 变化- 即同一类的对象之间的比较要求,可能与您在测试中实际测试的语义不同。例如; future 更改为 __eq__可能会引入比您的测试要求更多的相似性要求(例如;它们实际上是同一个对象,而不仅仅是相似)。由于 __eq__ 的预期行为是“这代表完全相同的东西”,这可能与您正在测试的内容不同。
    将比较保留在您的类之外 - 如果您想在不同的上下文中重复使用它,请将其添加为项目中的实用程序函数或将其作为特定函数添加到您的对象。现在我只是将它保留在您的测试中,然后在必要时将其移动到您的项目中。
    这一切都假设比较是简单的。如果涉及实际的逻辑和计算 - 那不属于测试。相反,向您的类添加逻辑,以适当的可测试格式直接公开值。
    测试应该只检查返回的值是否符合预期。但是,将返回的 dict 与该 dict 的预期值进行比较是完全有效的。

    关于python - 在 Python 中测试类的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66522130/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com