为什么测试总是失败?为什么它们有缺陷且无法维护?那是你问题的根源。
测试应该表达你的软件的需求。如果它们不断中断,那可能是因为它们与实现的内部耦合太紧密,而不是仅通过公共接口调用代码。如果您不能通过公共接口驱动代码,那么这通常表明代码可以更好地设计为更具可测试性——这也往往会使代码更清晰、更灵活和更健壮。
如果您删除测试,那么您将不知道您的代码库是否仍然有效。因为测试有“bug”而去掉测试会给你带来一个不舒服的问题:如果测试有 bug,为什么实际代码的 bug 会少一些?
另一方面,如果(旧版)测试非常缓慢且笨拙,那么其中一些至少可能会比它们更有价值 - 但您必须逐案考虑它们,并且弄清楚你将如何更换它们。您可以对测试进行计时,看看是否有任何特别慢的要针对 - 如果它们是 JUnit 测试,那么您会自动获得计时。您还可以测量代码覆盖率并查看测试是否重叠,或者考虑到它们的大小和运行时间,它们是否覆盖了非常少量的代码库。有一些专门针对处理遗留代码的书籍。
如果做得好,自动化测试会加快开发速度,而不是减慢开发速度(假设您希望软件实际运行),因为开发人员可以进行更改和重构代码,而不必担心每次接触任何东西都会破坏其他东西,并且因为他们可以清楚地判断某个功能何时起作用,而不是“我认为它似乎起作用”。
加快测试速度是可取的。如果端到端地运行系统,并非所有测试都可以很快,但我通常将此类“功能测试”与细粒度的单元测试分开,后者应该运行得非常快,因此它们可以一直运行。请参阅Michael Feathers 的这篇文章,了解他对单元测试的定义,以及如何处理慢速测试。
如果您关心您的代码是否有效,那么测试代码与实际代码一样重要——它需要正确、清晰和分解以避免重复。测试代码至少与真实代码一样多是完全正常的,尽管比率会因代码类型而有很大差异。你的具体例子是否过分,不看就无法判断。
更新:在您的其他问题之一中,您说“我已经向环境介绍了最新的漂亮框架、单元和功能测试、CI、错误跟踪器和敏捷工作流”。您是否改变了对测试的想法,或者这个问题可能是稻草人?还是您的问题真的是“我应该放弃所有旧测试并重新开始”?(鉴于您对开发人员编写新测试的评论,它不是这样读的......)