做到这一点,就不可能在不修复测试的情况下实际发布任何东西。
- 如果任何测试失败,则使构建失败。
- 如果忽略任何测试,则构建失败。
- 如果测试覆盖率低于某个特定级别,则使构建失败(因此人们不能只是删除测试来解决该问题)。
- 使用CI服务器进行发布构建,并且仅允许将服务器的构建放置中的构建提升为UAT /登台/生产/其他版本。
事实是,如果您的构建一次损坏超过15分钟(并且包括失败的测试),那么您就不会进行持续集成。
“核选项”是让您的源代码管理服务器拒绝破坏构建的用户以外的任何用户的提交/签入。显然,如果该人去度假,则管理员需要能够暂时改写此权限-但是,如果每个人都知道整个团队都被搞砸了,直到他们修复了测试,那么他们将很快解决这个问题。
一个好的策略(在自动执行时会更好)是在构建失败15分钟后将源恢复到最后一次已知的稳定提交。换句话说,如果您无法修复它,或者不知道是什么原因导致构建或测试中断,请还原它并在本地工作,直到解决为止-永远不要让其他开发人员在您不满意的时候打个招呼。他们不在乎的问题。
PS:如果您已经有很多测试失败,则可以在CI中使用“跟踪阈值”。设置它,这样如果有生成唯一的失败更多的测试失败不是最后一次。如果再加上覆盖规则,那么如果开发人员希望能够继续工作,他们最终将不得不改善测试情况。
PPS我意识到这在某些情况下可能看起来很苛刻,但这完全取决于您的文化。如果您达到了人们不会让构建崩溃或测试失败的地步(我的团队几乎从来没有做到过,尽管有时我不得不提醒他们),那么您就不必继续遵循最严格的规则了。尽管是IMO,但您应该始终在损坏的单元测试上使构建失败。集成/浏览器测试有时可能会失败。