添加 GitLab 挂钩以捕获缺少单元测试的合并请求 衡量单元测试的缺乏最后来回答你的问题

问题描述

我的任务是调查是否可以将某些内容添加到我们的 MR 批准流程中,以突出 GitLab 中提议的合并请求 (MR)(基于 C++ 的代码)是否包含任何新的单元测试或对现有测试的修改。总体目标是提醒开发者和审批者他们需要考虑单元测试。

理想情况下,一个小脚本将运行并检测是否存在其他测试或更改(我可以轻松编写,并且我接受此处可以完成的工作量是有限的)并在 MR 上显示警告,如果它们不是未检测到。

一个额外的步骤,如果可能的话,将阻止 MR,直到满足条件的进一步提交被推送,或者(额外/自定义)GitLab MR 字段完成解释为什么单元测试不适合于这种变化。该字段将与 MR 一起保存以用于审计目的。我承认这并非万无一失,但我希望将其作为进一步推动更多单元测试覆盖率的一部分进行试点。

如前所述,我可以轻松地在 Python 中编写脚本来检查提交中的单元测试,但我不知道我是否/如何将其连接到 GitLab MR 过程中(我查看了 web-hooks,但它们似乎专注于通知其他系统而不是事务性)以及 GitLab 是否具有足够的可扩展性让我们能够实现上述额外步骤。有什么想法吗?可以这样做吗?如果可以,我将如何处理?

解决方法

衡量单元测试的缺乏

检测是否存在其他测试或更改

我认为您在这里寻找错误的东西。 测试已更改或存在任何附加测试的事实并不意味着 MR 包含针对已提交代码的任何单元测试。

根本问题当然是一个难题。

您想要的一个很好的近似值通常是检查测试套件覆盖多少行代码。

如果在 MR 之后测试套件测试的 LOC 比之前更多,那么开发人员已经完成了他们的功课并且测试套件已经改进。如果覆盖范围变小,那就有问题了。

当然,用户仍然可以提交与其代码更改完全无关的单元测试,但至少整体覆盖率有所提高(或者:如果您在 MR 之前已经拥有 100% 的覆盖率,那么任何 MR将覆盖率保持在 100% 并添加新代码显然已经为新代码添加了单元测试)。

最后来回答你的问题

是的,可以配置一个 gitlab 项目来报告由 MR 引入的测试覆盖率变化。

https://docs.gitlab.com/ee/ci/pipelines/settings.html#test-coverage-parsing

您显然需要从您的单元测试运行中创建一个覆盖率报告。 您如何执行此操作取决于您使用的单元测试框架,但 gitlab 文档提供了一些提示。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...