编写肮脏的测试类似于没有测试。测试必须随着生产代码的发展而改变。测试越脏,改变它们就越有挑战性。因此,写干净的测试和代码是至关重要的。
干净的代码看起来总是像由一个关心它的人写的。你没有什么明显的方法可以让它变得更好。
然而,看起来测试代码不被认为是 "真正的代码",所以不被贴上 "肮脏测试 "的标签。
在Testμ会议的这个环节中,TestinGil的CTA兼CEOGil Zilberfeld与LambdaTest的高级产品经理Anmol Gupta合作,谈论了测试中反模式的具体例子以及如何清理它们。
以下是本次会议的主要收获。
- 什么使代码变得干净?
- 清洁代码的原则如何应用于测试?
- 测试中的代码气味。
- 测试代码中的重构模式
让我们在这次会议中探讨更多
Gil在会议开始时解释说,测试和生产代码是同样的东西,我们应该对它们适用同样的标准。但是,我们似乎不会这样做!
为什么写干净的测试和代码很重要?
他提供了几个不同的理由,说明写干净的测试和代码是至关重要的。
我们知道真正的代码,但它不像真正的代码,因为它进入了生产,被真正的用户所使用。我们不认为自己是真正的用户,尽管我们知道我们将是这个代码的用户。

在代码的演变过程中,测试可以是不同的,因为当我们写的测试通过后,它就会在我们的脑海中回到别的地方,我们可能认为我们永远不会再看到那个测试。我们知道我们会的,但是我们专注于下一个测试,而忘记了已经通过的那个测试。
这是我们对代码之间差异的感知,以及它的真实程度。 访问,就像我们是否回到测试,如果你想一下,我们回到生产代码。测试代码大多是通过的,除非它们是坏的或脆弱的,不管你想如何谈论它们。我们通常不会回去,直到它们破损。同样,我们在这两种类型的代码之间做一些分离,比如行动代码。
最终,我们需要以不同的方式思考这些事情,除非我们做这些相同的事情,否则我们可以应用不同的标准。
反复工作的代码
根据Gil的说法,我们希望我们的代码能够反复工作,不管你的开发方法是敏捷还是瀑布式。
作为开发者,我们喜欢研究新的东西,但回到以前能用但现在不能用的东西上是一种倒退。保持代码的干净,可以让我们反复创造新的东西,并减少花在旧东西上的时间。如果我们能读懂代码,我们就会在上面花更少的时间,然后再转回新的东西。
因此,保持代码的清洁和测试就像是尊重未来的我或你的时间。我们可以将其转化为可读性、可维护性或任何东西,但回到一遍又一遍地工作代码的目标,则转化为我们现在投入和投资多少时间和精力,以便在未来释放一些时间。
好与坏的代码
然后他描述了好的与坏的代码是什么样子。
好的和坏的代码都是不同的,因为大多数的代码审查不是在同一个房间里完成的,而是通过拉动请求完成的,这不是一个东西。当我们审查代码时,我们从不同的角度看它,因为写代码的人创造了你所创造的最宏伟的代码;否则,你就不会说它已经完成了。如果我写了代码并进行了审查,那么把它运送出去让其他人查看并分享他们的反馈是非常好的。
然后他列举了一些关于干净代码的名人名言。
- 清洁的代码是简单而直接的。它应该像散文一样写出来 - Grady Booch。
- 任何傻瓜都能写出计算机能理解的代码。好的程序员会写出人类可以理解的代码 - Martin Fowler。

是什么让测试变得干净?
吉尔分享了一些使测试干净的方面。这些方面如下。
- 你需要展示一些如何使用代码的意图,以及在场景中使用它时的预期。
- 测试应该专注于某些事情。例如,我们在单元测试中运行代码并执行一些断言。
- 完全按照他们说的做。
- 抽象的实现细节。

测试中的代码嗅觉
Gil随后去解释了代码气味。当你做了大量的编码工作,就会有代码气味。这些在功能上不是问题,但在你以后的工作中会给你带来障碍。
有一些模式有一个名字,通常适用于干净的代码或不干净的代码。
- 神类和方法。
- 评论。
- 不具交流性的名字。
- 嵌入式常量。

然后,他演示了一个Java语言中计算器控制器的脏测试例子,以及如何利用单元测试框架使其干净。
简而言之,一个伟大的测试在测试代码和生产代码之间没有任何不同或差异的标准。
是时候进行问答环节了!
- 我如何防止在不知情的情况下重复代码?
吉尔:通常情况下,你是改编代码的人,但在代码应用中,你通过两种方式发现它。一个是通过定期审查,人们会告诉你谁在其他地方看到过这个代码。有一些工具可以寻找一些代码应用的模式,而不仅仅是准确的代码应用。
- 类似于你在测试自动化中的构建者模式的例子,还有哪些模式可以利用?
Gil: 在设计模式中,我们使用一个单子;有时,我们称之为邪恶的单子。 例如,如果你要初始化数据库作为你测试的一部分,你将为你套件中的其他测试做一次。 所以,它是一种单子。然后,你可以抬头看看哪里存在模式,并与实际代码相关。测试将采用相同的标准。
- 我相信每个人都有自己写代码的风格,那么我们如何参与到写代码的实践中去,使其干净?
吉尔:这不是关于干净的编码。这是一个共同的团队的事情,所以每个人都有自己的风格,如果你为别人做代码审查,你应该在做审查的时候思考,你想说,嗯--这个东西看起来不对。 它看起来不对只是因为我的写法不同,还是我们希望每个人都能这样写代码?你需要说这些是需要修正的事情,并教给大家这些。我认为这应该是代码审查和测试审查的结果。
- 有时直接删除测试,然后从头开始重写,而不是试图改进已经存在的东西,这样做是否更容易?
Gil: 首先,是的,对代码来说也是如此。这里面有一个更深的含义。这可能会更容易,因为测试不是昨天写的,而是一年前写的,所以试图进入别人的代码的头脑,就像一个非常大的努力,第一次就能做得正确和正确。因此,删除和从头开始写通常更容易和更简单。
- 在代码审查中,我们应该遵循哪些好的做法?
Gil: 人们通常说--你不是你的代码。这是真的,但做审查的人并不是代码的所有者,所以它是代码。它可以被替换或以不同的方式编写。
因此,第一件事是要友好,第二件事是要考虑它是否重要,所以每个人都可以学习如何做,而不是因为你会怎么写,因为当你做这种区分的时候,人们开始考虑他们是否还能读懂它,这不是一个大问题。因此,如果你记住这些东西,每个人都可以阅读重要和不重要的东西。