【问题标题】:How to write a Git pre-commit hook that prevents committing of an Android project if the test project fails?如果测试项目失败,如何编写一个 Git 预提交钩子来防止提交 Android 项目?
【发布时间】:2012-04-19 18:11:59
【问题描述】:

鉴于我在我的工作区中有一个 android 项目 MyAndroidProject 和我的测试项目 MyAndroidProjectTests 目录,我如何编写一个预提交 git 挂钩,它将在 MyAndroidProjectTests 中运行测试并拒绝提交任何如果测试失败,代码会改变吗?

当我在终端上运行测试时,它们通常会得到如下输出:

com.mydomain.tests.Models.MyProjectTests:.......
Test results for InstrumentationTestRunner=.......
Time: 0.05

OK (10 tests)

除了解析最后一行的输出(例如 OKFAILED 之外,我不确定如何使用什么来尝试确定测试是通过还是失败)非常喜欢那种方法。理想情况下,我希望从我用来在终端上运行测试的命令中返回一个状态:

adb shell am instrument -w com.mydomain.tests/android.test.InstrumentationTestRunner

我想在一个 shell 脚本中使用响应,我可以将它放在 .git/hooks/ 文件夹中作为预提交挂钩。

我将不胜感激任何信息或其他资源的链接,并在此先感谢。

【问题讨论】:

  • 在预提交挂钩中添加长时间运行的任务通常是一个坏主意,因为它会阻止您工作。此类检查应在 CI 系统上进行,该系统可对破坏测试的提交合并进行门控。

标签: android git testing hook commit


【解决方案1】:

git hooks 是从你的项目/repo 根目录执行的——所以你应该能够直接在 precommit hook 中使用你的命令:

#!/bin/bash
adb shell am instrument -w com.mydomain.tests/android.test.InstrumentationTestRunner

如果 adb 在失败时返回非零存在代码 - 提交将被中止。

如果您需要为其他目的获取退出代码,other questions 会明确说明如何执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2019-02-15
    • 2012-10-26
    • 2020-10-18
    • 2013-12-15
    • 1970-01-01
    相关资源
    最近更新 更多