我如何重构单元测试?

fre*_*low 11 agile refactoring unit-testing

这最近让我疯了......

什么是重构?

代码重构是重构现有计算机代码的过程- 改变因子 - 不改变其外部行为.

我们如何确保在重构​​过程中不会破坏任何东西?

在重构一段代码之前,需要一组可靠的自动单元测试.测试用于证明在重构之前模块的行为是正确的.

好的.但是,如果我在单元测试中发现代码味道,我该如何处理?说,一个做太多的测试方法?在重构单元测试时,如何确保不破坏任何内容?

我需要某种元测试吗?是单位测试一直下来吗?

或者单元测试不遵守正常的重构规则?

Mar*_*ann 6

根据我的经验,有两个理由相信测试:

  • 评论
  • 你已经看到它失败了

这些都是在编写测​​试时发生的活动.如果你保持测试不可变,你可以继续信任它们.

每次修改测试时,它都变得不那么值得信赖.

您可以通过重复上述过程来稍微缓解该问题:查看测试的更改,并临时更改受测系统(SUT),以便您可以看到测试按预期失败.

修改测试时,保持SUT不变.测试和生产代码相互控制,因此在保持另一个锁定的同时改变一个是最安全的.


Jas*_*ary 6

尊重这是一篇较老的帖子,在我的帖子评论中引用TDD的实践.经过审核,我想投入两美分.

主要是因为我觉得接受的答案是滑稽的说法:

每次修改测试时,它都变得不那么值得信赖.

我对" 修改"这个词有疑问.关于重构诸如改变之类的单词,修改等通常会被避免,因为它们会带来与重构相反的含义.

如果您修改传统意义上的测试,则存在引入更改的风险,这使得测试不那么值得信赖.

但是,如果您在重构意义上修改测试,那么测试应该同样值得信赖.

这让我回到原来的问题:

我如何重构单元测试?

很简单,就像你在任何其他代码中一样 - 孤立无援.

因此,如果您想重构测试,请不要更改代码,只需更改测试即可.

我需要测试我的测试吗?

不,事实上,Kent Beck在他的Full Stack Radio采访中解决了这个问题,他说:

您的代码是测试的测试

Mark Seemann在他的回答中也注意到了这一点:

测试和生产代码相互控制,因此在保持另一个锁定的同时改变一个是最安全的.

最后,这不是关于如何重构测试,而是一般的重构.适用相同的原则,即重构重构代码而不改变其外部行为.如果不更改外部行为,则不会丢失信任.