在提交前记得运行测试

6 投票
5 回答
2646 浏览
提问于 2025-04-16 02:51

我们在代码上有一套不错的单元测试,这些测试运行时间不到2分钟。我们还使用TeamCity来进行构建,并在每次提交代码后运行测试。不过,有时候开发者会“忘记”在提交之前运行所有测试,这样就会导致TeamCity出错。如果这个提交是在晚上6点进行的,可能会导致系统过夜处于故障状态。

这里的“忘记”是个笼统的说法,实际上还有其他一些常见原因,即使是记得运行测试,也可能导致TeamCity出错。例如:

-> 开发者只提交了他/她工作区中部分修改过的文件。
-> 有一个文件是在Eclipse之外修改的,导致Eclipse的团队同步视图没有检测到这个文件是脏的(即有改动)。

你们公司是怎么处理这个问题的呢?

我们在考虑为开发者引入一个“提交流程”,这将是一个自动化工具,可以自动运行所有单元测试,然后提交工作区中所有“脏”的文件。你有没有过这样的经验?你知道有什么工具可以帮助实现这个流程吗?我们的开发环境是使用Eclipse的PyDev插件的Python。

5 个回答

4

我觉得这更多的是一个社会问题,而不是自动化系统的缺陷。

当然,你可以改进现有的系统,但这些系统还是比不上那些在提交代码之前,认真考虑自己提交内容影响的人,以及在提交之前进行测试的人。

7

我之前在一个团队工作的时候,我们有个约定:如果有人搞坏了测试,第二天就得请全队吃培根三明治。这听起来有点极端,但效果非常好!

4

对于Mercurial(一个版本控制工具),你可以使用“钩子”这个功能,它会在你提交代码之前先运行测试,只有测试通过了才能提交代码。不过,这样可能会让提交代码的时间变得很长(不过开发者本来就应该自己先跑这些测试)。

另外,你也可以自己写一套bash脚本,先运行测试,测试通过后再执行提交命令。比如在使用Django和SVN提交代码时,脚本可以简单得像这样:

./manage.py test && svn commit $@

还有一种方法:如果有人提交了不通过测试的代码,就要支付一定的罚款。这样一来,大家很快就会记得去测试代码,因为没人喜欢花钱嘛;-)

撰写回答