如何使用 Google Test 向测试添加元数据 / 如何将数据从 Google Test 发送到 TestEven

How to add metadata to a test using Google Test / How to send data from a Google Test to a TestEventListener

本文关键字:Test Google 数据 TestEven 何使用 测试 添加 元数据      更新时间:2023-10-16

让我解释一下。我目前正在为学校的编程作业设置一个自动评分器。我们正在将Gradescope用于自动分级基础设施。跳过详细信息,Gradescope期望在运行测试用例后,将使用其架构填充JSON文件。

现在,这就是我挣扎的地方。我决定设置它的最佳方法是使用 Gtest 事件侦听器。这将允许我在测试运行时获取有关测试的信息并开始创建 JSON。但是,要使Gradescope正常工作,我需要一些信息,而不是测试是否通过。例如,我需要知道该特定测试在作业上下文中的价值,或者它将在Gradescope上显示什么名称,等等。处理此问题的一种方法是将该元信息存储在 YAML 文件中,该文件将由我的侦听器读取。但是,我想远离它,因为它需要用户仔细设置 YAML 以使测试名称匹配,并且通常更容易被用户(即设置作业的教师(出错。

理想情况下,我想要一个将此元数据与测试一起保存的 API。我设想像GRADED_TEST(TestSuite, TestName, /*weight=*/10, /*name=*/"Gradescope Test!", ...)这样的东西来取代GTest提供的TEST/TEST_F宏。但是,我发现这很难做到,因为没有简单的方法(据我所知(将信息从测试对象发送到测试事件侦听器。有什么想法吗?

谢谢!

(我不打算将此作为答案,但我还不能发表评论。

您能否为测试用例创建一个命名方案以包含此类信息?

例如:TEST(TestSuite, TestName_weight_10_name_GradescopeTest)Google 测试的文档不鼓励在测试名称中使用下划线,但它工作正常。