des*_*ons 20 c++ unit-testing googletest
我有一个测试夹具类,目前许多测试都使用它.
#include <gtest/gtest.h>
class MyFixtureTest : public ::testing::Test {
void SetUp() { ... }
};
Run Code Online (Sandbox Code Playgroud)
我想创建一个参数化测试,它也使用MyFixtureTest提供的所有功能,而无需更改我现有的所有测试.
我怎么做?
我在网上发现了类似的讨论,但还没有完全理解他们的答案.
mab*_*ham 39
这个问题现在在Google测试文档中得到解答(VladLosev 的答案在技术上是正确的,但可能稍微多一些工作)
具体来说,当您想要将参数添加到预先存在的夹具类时,您可以这样做
class MyFixtureTest : public ::testing::Test {
...
};
class MyParamFixtureTest : public MyFixtureTest,
public ::testing::WithParamInterface<MyParameterType> {
...
};
TEST_P(MyParamFixtureTest, MyTestName) { ... }
Run Code Online (Sandbox Code Playgroud)
Vla*_*sev 22
问题是,对于常规测试,您的fixture必须从testing :: Test和参数化测试派生,它必须从test :: TestWithParam <>派生.
为了适应这种情况,您必须修改fixture类才能使用参数类型
template <class T> class MyFixtureBase : public T {
void SetUp() { ... };
// Put the rest of your original MyFixtureTest here.
};
// This will work with your non-parameterized tests.
class MyFixtureTest : public MyFixtureBase<testing::Test> {};
// This will be the fixture for all your parameterized tests.
// Just substitute the actual type of your parameters for MyParameterType.
class MyParamFixtureTest : public MyFixtureBase<
testing::TestWithParam<MyParameterType> > {};
Run Code Online (Sandbox Code Playgroud)
这样,您可以在创建参数化测试时保持所有现有测试的完整性
TEST_P(MyParamFixtureTest, MyTestName) { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31102 次 |
| 最近记录: |