gpt4 book ai didi

C++ 和谷歌测试

转载 作者:行者123 更新时间:2023-11-30 05:01:04 25 4
gpt4 key购买 nike

我正在研究 Google Test 参数化测试。然而,它们看起来真的很好,除非我错过了一个技巧,否则我看不出你如何为每个测试使用不同的测试数据集。我使用了一个我发现的例子 online这很好用,但看起来我需要创建一个新类,即 FooTest1、2、3、4 等,以便为每个类提供一个 INSTANTIATE_TEST_CASE_P,如果我想提供一个具有不同参数的 TEST_P。我在想我一定是错过了什么。

class FooTest: public ::testing::TestWithParam < int >{....};

TEST_P(FooTest, DoesBar)
{
ASSERT_TRUE(foo.DoesBar(GetParam());
}

INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10));

有人可以确认这是否可以通过不同的方式实现吗?

谢谢

最佳答案

不幸的是,没有简单的解决方法。

每个INSTANTIATE_TEST_CASE_P使用提供的测试值范围实例化(参数化)测试装置(class FooTest: public ::testing::TestWithParam < int >{....})(在 INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)) 的情况下,值从 1 到 9 - 请记住,不包括最终值)

每个TEST_P定义为使用该固定装置(例如 TEST_P(FooTest, DoesBar) )将为值范围内的每个值执行一次(即 GetParam() 将在所有执行中返回 1 到 9,“OneToTenRange” 作为测试前缀 ).

您可以添加第二个 INSTANTIATE_TEST_CASE_P对于相同的测试夹具(例如 INSTANTIATE_TEST_CASE_P(TenToTwentyRange, FooTest, ::testing::Range(10, 20))),这将导致所有使用 FooTest 夹具的测试也执行该范围(在本例中为 10 到 19,前缀为 “TenToTwentyRange”)。

如果您希望 TEST_P 执行特定范围(或使用不同的参数),您需要创建一个单独的测试夹具并根据您的需要实例化它。翻转视角,测试夹具定义了您运行的测试的参数(即 GetParam() 返回的内容)并确保与其关联的每个 TEST_P 都针对每个参数执行一次。

幸运的是,您可以使用以下技巧让事情变得更轻松:

创建一个包含所有设置/拆卸的普通(非参数化)测试夹具。然后从中派生一个基本的参数化测试夹具,并通过 INSTANTIATE_TEST_CASE_P 对其进行实例化。

class BaseTest : public ::testing::Test
{
// Do your common stuff here
}

// FooTest
class FooTest: BaseTest, testing::WithParamInterface<int>
{
FooTest() : BaseTest() {}
};

INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10))

// BarTest
class BarTest: BaseTest, testing::WithParamInterface<int>
{
BarTest() : BaseTest() {}
};

INSTANTIATE_TEST_CASE_P(TenToTwentyRange, BarTest, ::testing::Range(10, 20))

关于C++ 和谷歌测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50449380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com