如何在运行时将参数传递给Google测试点?

时间:2018-03-05 19:01:44

标签: c++ googletest

有没有办法在运行时将参数传递给谷歌测试点? 我知道我可以使用

进行静态参数
const filters = selectFilters(storeState);
  filter.removeValue(value);
  return this.router.navigate(['some route'], {
    queryParams: filters.toQueryParams()
  });

但在我的用例中,我想做一些像

这样的事情
TEST_P(fooTest,testPointName)
{
}
INSTANTIATE_TEST_CASE_P(InstantiationName,
                        FooTest,
                        ::testing::Values("blah"));

我很感激任何指示。

2 个答案:

答案 0 :(得分:1)

您可以使用SetUpTestCase实现这一目标。在fixture类中,创建一个保存所需值的静态变量。然后在fixture类中实现静态函数SetUpTestCaseTearDownTestCase,它们将初始化并清理您的值。这是一般的想法:

class MyFixture : public ::testing::Test {
protected:
    static void SetUpTestCase() {
        // Code that sets up m_values for testing
    }

    static void TearDownTestCase() {
        // Code that cleans up m_values. This function can be ommited if
        // there are no specific clean up tasks necessary.
    }

    static MyValues m_values;
};

现在使用TEST_F使您的测试成为灯具的一部分。现在m_values将在灯具中的所有测试运行之前初始化一次,所有这些测试都可以访问它,并且清理将在所有测试完成后完成。

有关详细信息,请查看https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#sharing-resources-between-tests-in-the-same-test-case

答案 1 :(得分:0)

AFAIK使用值参数化测试是不可能的,因为它们是在编译时使用宏和模板生成的。

您可以在测试中编写循环并对每个值执行测试。您可以使用custom error messageslog additional information制作特定于该值的错误消息。或者也许使用SCOPED_TRACE