我可以将参数传递给谷歌测试功能吗
Can I pass parameters to googletest test function
在构建了我的测试文件xxxxtest之后,使用gtest,我可以在运行测试时传递一个参数,例如./xxxxtest 100
。我想用这个参数控制我的测试函数,但我不知道如何在测试中使用这个段落,你能给我看一个测试中的样本吗?
您可以执行以下操作:
main.cc
#include <string>
#include "gtest/gtest.h"
#include "my_test.h"
int main(int argc, char **argv) {
std::string command_line_arg(argc == 2 ? argv[1] : "");
testing::InitGoogleTest(&argc, argv);
testing::AddGlobalTestEnvironment(new MyTestEnvironment(command_line_arg));
return RUN_ALL_TESTS();
}
my_test.h
#include <string>
#include "gtest/gtest.h"
namespace {
std::string g_command_line_arg;
}
class MyTestEnvironment : public testing::Environment {
public:
explicit MyTestEnvironment(const std::string &command_line_arg) {
g_command_line_arg = command_line_arg;
}
};
TEST(MyTest, command_line_arg_test) {
ASSERT_FALSE(g_command_line_arg.empty());
}
您应该使用类型参数化测试。https://github.com/google/googletest/blob/main/docs/advanced.md#type-参数化测试
类型参数化测试与类型化测试类似,只是它们不要求您提前知道类型列表。相反,您可以先定义测试逻辑,然后用不同的类型列表实例化它。您甚至可以在同一程序中多次实例化它。
如果您正在设计接口或概念,则可以定义一套类型参数化测试,以验证接口/概念的任何有效实现都应该具有的属性。然后,每个实现的作者都可以用他的类型实例化测试套件,以验证它是否符合需求,而不必重复编写类似的测试。
示例
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));
如果您不想创建自己的main()
函数。您还可以考虑通过环境变量传递信息。
在我的例子中,我只是想要一个标志来显示调试信息或不显示调试信息,所以我使用了getenv()
。
另一种选择是将任何需要的信息放在一个文本文件中,并从测试中读取。
相关文章:
- G++10 的功能测试在 __cpp_lib_span 上失败
- 单位测试私人方法通过使其自由功能
- 单位测试QT中的非返回功能
- 功能测试宏在 Visual C++ 中无法正常工作
- 在Google测试框架中,如何期望函数调用或其他功能调用
- 谷歌测试的重载功能
- (指针)降低测试分数后计算平均功能的问题
- 测试模拟功能的最佳方法
- 支架检查功能仅测试输入的前 2 个
- 相等性测试功能
- 更改单元测试的类功能的正确方法
- 如何使用C++测试功能支持
- 在Linux Mint上编译Qt-OpenGL功能测试失败
- 回文测试功能
- 测试C 轮询插座功能
- CPPUNIT:我们真的每个测试需要一个功能吗?
- Mac的McCabe式功能复杂度测试
- 如何使用Google测试在Main()函数中的特定位置调用特定的测试功能
- CPP 中速度性能的测试功能
- 我可以将参数传递给谷歌测试功能吗