我们在代码上有一套不错的单元测试,这些单元测试在2分钟内即可运行。我们还使用TeamCity进行构建并在每次 checkin 后运行测试。但是,仍然存在问题,即开发人员在提交之前会“忘记”运行所有测试,从而导致TeamCity失败;如果此 checkin 是在下午6点完成的,可能会整夜破损。
“忘记”是一个通用术语,还有其他一些常见原因,即使记得记住运行测试也可能导致TeamCity失败。如。
->开发人员仅在他/她的工作区中检入一些已修改的文件。
->在eclipse外部修改了文件,以使eclipse的团队同步透视图不会将其检测为脏文件。
您如何在组织中处理此问题?
我们正在考虑为开发人员引入“ checkin 过程”,这将是一个自动化的工具,它将自动运行所有单元测试,然后在工作区中提交所有“脏”文件。您对这种过程有任何经验吗?您是否知道任何可能有助于此过程的工具?我们的开发环境是使用Eclipse的PyDev插件的Python。
最佳答案
出于商业目的,您可以使用钩子(Hook),该钩子(Hook)将运行测试并仅允许成功进行推送。但这可能需要很多时间才能进行推送(但开发人员无论如何都必须运行这些测试)。
或者,您也可以只拥有自己的bash脚本集,这些脚本将运行测试,然后才运行commit命令。例如,对于django和svn commit,它看起来像这样简单:
./manage.py test && svn commit $@
或还有另一种方法:如果有人提交了代码,但未通过测试,他将支付一定的费用。很快人们会记得进行测试,因为他们不喜欢付钱的概念;-)