gpt4 book ai didi

ruby-on-rails - TDD 是否意味着无论多么复杂,我都必须为每个方法编写测试?

转载 作者:行者123 更新时间:2023-12-04 07:36:43 25 4
gpt4 key购买 nike

假设我有一个用户类有一个方法 is_old_enough?

该方法只是检查年龄是否超过 18 岁。看起来很简单。

TDD 是否意味着我必须为此编写测试,即使它是微不足道的?

class User
def is_old_enough?
self.age >= 18
end
end

如果是这样,为什么?为此编写测试有什么好处?您只需测试 x >= y 是否按照您期望 >= 运算符的方式工作。

因为我看到最有可能发生的情况如下:

事实证明年龄实际上应该是 21 岁。这是一个测试没有发现的错误,因为我们编写代码时他们有错误的假设。于是他们进去把方法改成>=21。但是现在测试失败了!所以他们也必须去改变测试。所以测试没有帮助,实际上在重构时给出了误报。

看起来像这样的简单方法的测试实际上并没有测试任何有用的东西,实际上是在伤害你。

最佳答案

我认为您混淆了测试覆盖率和测试驱动开发。 TDD 只是一种开发自动化测试的实践,它将验证某些新功能的用例。通常它一开始就会失败,因为您已经将功能 stub 或根本没有实现它。接下来,您开发该功能,直到测试通过。

这个想法是您正在开发测试来验证您的重要用例/功能。如果您认为常规功能测试涵盖了简单功能,这并不一定意味着您需要测试这些功能。

就覆盖范围而言,这完全取决于您作为开发人员(或团队)的决定。显然,需要对 API 进行大约 1 对 1 的测试覆盖,但您可以选择是否认为实现 is_old_enough? 总是足够容易。现在这似乎是一个简单的实现,但也许将来会改变。当您选择是否编写测试时,您只需要注意这些类型的决定。不过,您的用例很可能不会改变,而且测试很容易编写。对代码的所有领域都充满信心并没有坏处。

关于ruby-on-rails - TDD 是否意味着无论多么复杂,我都必须为每个方法编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22396108/

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