gpt4 book ai didi

unit-testing - 在 TDD 中使用 'real' 实用程序类而不是模拟是否可以接受?

转载 作者:行者123 更新时间:2023-12-03 15:09:48 24 4
gpt4 key购买 nike

我有一个项目,我正在尝试学习单元测试和 TDD 实践。我发现我遇到了相当困惑的情况,我花了很长时间为一个几乎无处不在的实用程序类设置模拟。

从我读到的关于单元测试的内容来看,如果我正在测试 MyClass,我应该模拟任何其他功能(例如 UtilityClass 提供的功能)。仅使用 UtilityClass 而不是为所有不同的测试用例设置模拟是否可以接受(假设 UtilityClass 本身有一组全面的测试)?

编辑:我正在为之进行大量设置的一件事。
我正在建模一张 map ,在不同的位置有不同的对象。我的实用程序类的常用方法之一是 GetDistanceBetween。我正在测试根据其各自属性对事物产生影响的方法,因此例如选择一个点的 5 个单位内的所有对象和年龄超过 3 岁的所有对象的测试将需要多次测试(获取范围内的旧对象,忽略旧对象范围,忽略范围内的年轻对象,在每种情况的倍数下正常工作)并且所有这些测试都需要设置“GetDistanceBetween”方法。乘以每个使用 GetDistanceBetween 的方法(几乎每个方法)以及该方法在不同情况下应返回的不同结果,这需要大量设置。

我可以看到,随着我的进一步开发,可能会有更多的实用程序类调用、大量对象以及这些模拟实用程序类的大量设置。

最佳答案

规则不是“模拟一切”,而是“让测试变得简单”。如果出现以下情况,应使用模拟

  • 您无法以合理的努力创建实例(阅读:您需要一个方法调用,但要创建实例,您需要一个工作数据库、一个数据库连接和五个其他类)。
  • 创建额外的类是昂贵的。
  • 附加类返回不稳定值(如当前时间或数据库中的主键)
  • 关于unit-testing - 在 TDD 中使用 'real' 实用程序类而不是模拟是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106260/

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