这最近让我疯了......
什么是重构?
代码重构是一个过程 重组现有计算机代码 - 改变保理 - 而不改变其外部行为。
我们如何确保在重构过程中不会破坏任何东西?
在重构一段代码之前,需要一组可靠的自动单元测试。 测试用于证明在重构之前模块的行为是正确的。
好的。但是,如果我发现代码味道,我该怎么办? 在单元测试自己?说,一个测试方法做得太多了?在重构单元测试时,如何确保不破坏任何内容?
我需要某种元测试吗?是单元测试一直下来吗?
或者单元测试是否不遵守正常的重构规则?
这最近让我疯了......
什么是重构?
代码重构是一个过程 重组现有计算机代码 - 改变保理 - 而不改变其外部行为。
我们如何确保在重构过程中不会破坏任何东西?
在重构一段代码之前,需要一组可靠的自动单元测试。 测试用于证明在重构之前模块的行为是正确的。
好的。但是,如果我发现代码味道,我该怎么办? 在单元测试自己?说,一个测试方法做得太多了?在重构单元测试时,如何确保不破坏任何内容?
我需要某种元测试吗?是单元测试一直下来吗?
或者单元测试是否不遵守正常的重构规则?
根据我的经验,有 信任测试的两个理由:
这些都是在编写测试时发生的活动。如果你保持测试不可变,你可以保持信任。
每次修改测试时,它都变得不那么值得信赖。
您可以通过重复上述过程来稍微缓解该问题:查看测试的更改,并临时更改受测系统(SUT),以便您可以看到测试失败 正如所料。
修改测试时,保持SUT不变。测试和生产代码相互制约,所以 在保持另一个锁定的同时改变一个 是最安全的。
尊重这是一个较旧的帖子,它被引用 在评论中 在我的帖子上 TDD在实践中。经过审核,我想投入两分钱。
主要是因为我觉得 接受了答案 发表声明:
每次修改测试时,它都变得不那么值得信赖。
我对这个词有疑问 修改。关于 重构 这样的话就像 更改, 修改通常避免使用等,因为它们会带来与重构相反的含义。
如果你 修改 在考试中 传统意义 存在风险,您引入了一项使测试不那么值得信赖的变更。
但是,如果你 修改 在考试中 重构意义 那么测试应该是 不会少 值得信赖。
这让我回到原来的问题:
我如何重构单元测试?
很简单,就像你在任何其他代码中一样 - 孤立地。
因此,如果您想重构测试,请不要更改代码,只需更改测试即可。
我需要测试我的测试吗?
没有。 事实上,肯特贝克在他的文章中解决了这个问题 全栈电台采访,说:
您的代码是测试的测试
Mark Seemann也注意到了这一点 他的回答:
测试和生产代码相互控制,因此在保持另一个锁定的同时改变一个是最安全的。
最后,这不是关于如何重构 测试 一般来说,它只是重构。同样的原则适用,即重构重构代码 而不改变其外部行为。如果不更改外部行为,则不会丢失信任。
在重构单元测试时,如何确保不破坏任何内容?
保留旧测试作为参考。
详细说明:具有良好覆盖率的单元测试值得他们重视 在结果中。你没有让他们保持惊人的程序结构或缺乏重复;它们本质上是有用的输入/输出对的数据集。
因此,当“重构”测试时,使用新集测试的程序显示相同的行为才真正重要。应该仔细地手动检查每个差异,因为可能已经找到了新的程序错误。
你也可能不小心 减少 重构时的覆盖范围。这很难找到,需要专门的覆盖率分析工具。
根据我的经验,有 信任测试的两个理由:
这些都是在编写测试时发生的活动。如果你保持测试不可变,你可以保持信任。
每次修改测试时,它都变得不那么值得信赖。
您可以通过重复上述过程来稍微缓解该问题:查看测试的更改,并临时更改受测系统(SUT),以便您可以看到测试失败 正如所料。
修改测试时,保持SUT不变。测试和生产代码相互制约,所以 在保持另一个锁定的同时改变一个 是最安全的。
尊重这是一个较旧的帖子,它被引用 在评论中 在我的帖子上 TDD在实践中。经过审核,我想投入两分钱。
主要是因为我觉得 接受了答案 发表声明:
每次修改测试时,它都变得不那么值得信赖。
我对这个词有疑问 修改。关于 重构 这样的话就像 更改, 修改通常避免使用等,因为它们会带来与重构相反的含义。
如果你 修改 在考试中 传统意义 存在风险,您引入了一项使测试不那么值得信赖的变更。
但是,如果你 修改 在考试中 重构意义 那么测试应该是 不会少 值得信赖。
这让我回到原来的问题:
我如何重构单元测试?
很简单,就像你在任何其他代码中一样 - 孤立地。
因此,如果您想重构测试,请不要更改代码,只需更改测试即可。
我需要测试我的测试吗?
没有。 事实上,肯特贝克在他的文章中解决了这个问题 全栈电台采访,说:
您的代码是测试的测试
Mark Seemann也注意到了这一点 他的回答:
测试和生产代码相互控制,因此在保持另一个锁定的同时改变一个是最安全的。
最后,这不是关于如何重构 测试 一般来说,它只是重构。同样的原则适用,即重构重构代码 而不改变其外部行为。如果不更改外部行为,则不会丢失信任。
在重构单元测试时,如何确保不破坏任何内容?
保留旧测试作为参考。
详细说明:具有良好覆盖率的单元测试值得他们重视 在结果中。你没有让他们保持惊人的程序结构或缺乏重复;它们本质上是有用的输入/输出对的数据集。
因此,当“重构”测试时,使用新集测试的程序显示相同的行为才真正重要。应该仔细地手动检查每个差异,因为可能已经找到了新的程序错误。
你也可能不小心 减少 重构时的覆盖范围。这很难找到,需要专门的覆盖率分析工具。
你不知道你不会破坏任何东西。避免“谁来测试我们的测试?”的问题你应该尽可能简单地测试,以减少出错的可能性。
当你重构测试时,你总是可以使用自动重构或其他“可信”方法,如方法提取等。
您还经常使用现有的测试框架。他们是由他们的创作者测试的。因此,当您开始构建自己的(甚至简单的)框架,复杂的辅助方法等时,您始终可以对其进行测试