代码之家  ›  专栏  ›  技术社区  ›  Kozyarchuk

记住在提交之前运行测试

  •  6
  • Kozyarchuk  · 技术社区  · 16 年前

    我们在代码上有一组合适的单元测试,这些单元测试在2分钟内运行。我们还使用TeamCity进行构建,并在每次签入后运行测试。但是,我们仍然会遇到这样的问题,即开发人员在提交之前“忘记”运行所有测试,从而导致TeamCity失败,如果在下午6点完成此签入,则可能会在夜间中断。

    “忘记”是一个通用术语,还有其他一些常见的原因,为什么即使记住运行测试也可能导致TeamCity失败。比如

    ->开发人员只签入他/她的工作区中的一些修改过的文件。
    ->在Eclipse外部修改了一个文件,这样Eclipse的团队同步透视图就不会检测到它是脏的。

    在您的组织中,您如何处理这个问题?

    我们正在考虑为开发人员引入“签入过程”,这将是一个自动工具,它将自动运行所有单元测试,然后提交工作区中的所有“脏”文件。你对这个过程有经验吗?您是否知道任何有助于此过程的工具?我们的开发环境是使用Eclipse的pydev插件的python。

    5 回复  |  直到 10 年前
        1
  •  3
  •   gruszczy    16 年前

    对于Mercurial,您可以使用钩子,这将运行测试,并且只允许推送成功。但这可能需要很多时间进行推送(但开发人员无论如何都必须运行这些测试)。

    或者您可以只拥有自己的一组bash脚本,这些脚本将运行测试,然后只运行commit命令。例如,对于django和svn commit,它看起来可能很简单:

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

    或者还有另一种方法:如果有人提交代码,而代码没有通过测试,他会支付一些金额。很快人们就会记住测试,因为他们不喜欢花钱的概念;—)

        2
  •  6
  •   Grzenio    16 年前

    在其中一个小组里,在我们达成协议之前,我正在工作,任何一个考试不及格的人第二天早上都会给整个小组买熏肉三明治。它是极端的,但它是完美的!

        3
  •  4
  •   David Henderson    16 年前

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

    是的,您可以在适当的地方改进系统,但是它们与考虑到它们提交的含义并在它们执行提交之前对其进行测试的人是不匹配的。

        4
  •  3
  •   VoiceOfUnreason    16 年前

    Teamcity对 pretested commit ;如果您的开发团队正在使用受支持的IDE,那么您可能会对此进行研究。

    在我的公司里,我们不用太担心——我们的模式看起来像这样。

    (a)每个开发人员在TeamCity中都有自己的项目配置,根指向自己的沙盒。他们可以在这里做任何他们喜欢的事情。

    (b)开发团队有一个集成沙盒,其中交付了所有更改。项目封装了在源代码管理系统中监视此分支的配置。Dev领导在这里要制定规则,但这个规则几乎总是“必须保持绿色”。我得看看干净构建的确切百分比——这不是一个完美的记录,但是它的高到我从来没有被诱惑去坚持开发人员在运行测试时要更加严格。

    (c)实际交付来自主流,主流应保持绿色(tm)。Dev Lead负责按照定义良好的计划向主流交付集成的干净快照。这个项目实际上生成了交付给测试的安装程序、进入第三方托管的位等。

    您可能会得到比我们更具侵略性的策略的一个原因是我们的构建周期是缓慢的-大约四个小时。如果我们是一个数量级较小,成功率很低的人,我可能会提出另一个问题。

        5
  •  0
  •   maazza    10 年前

    对于Git,您可以: http://francoisgaudin.com/2011/02/16/run-django-tests-automatically-before-committing-on-git/

    在Git上提交之前自动运行Django测试

    由于我经常在提交之前忘记运行单元测试,所以我花费了 当我发现回归3时,很多时间都在寻找不好的承诺 稍后提交。

    但是,在每个测试之前自动运行测试是非常容易的 承诺。在.git/hooks/pre-commit中,放置:

    python manage.py 
    test exit $?
    

    然后chmod 755这个文件和它的完成。我真的很喜欢Git:-)

    在提交之前不要忘记源代码virtualenv。

    注意,测试是在工作树上运行的,而不是提交 因此,如果只提交工作树的一部分,它可能会失败。 当提交通过测试时。

    推荐文章