构建我的测试文件xxxxtest后,使用gtest可以在运行测试时传递一个参数,例如: ./xxxxtest 100
。我想使用参数控制我的测试功能,但我不知道如何在我的测试中使用para,你能在测试中向我展示一个样本吗?
答案 0 :(得分:5)
您可以执行以下操作:
#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();
}
#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());
}
答案 1 :(得分:3)
您应该使用类型参数化测试。 https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#type-parameterized-tests
类型参数化测试与类型化测试类似,不同之处在于它们并不要求您提前知道类型列表。相反,您可以先定义测试逻辑,然后再使用不同的类型列表对其进行实例化。您甚至可以在同一个程序中多次实例化它。
如果您正在设计接口或概念,则可以定义一组类型参数化测试,以验证接口/概念的任何有效实现应具有的属性。然后,每个实现的作者可以用他的类型实例化测试套件,以验证它是否符合要求,而不必重复编写类似的测试。
实施例
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));
答案 2 :(得分:0)
如果您不想创建自己的main()
函数。您还可以考虑通过环境变量传递信息。
就我而言,我只是想要一个标记来显示或不显示调试信息,所以我使用了getenv()
。
另一种选择是将任何需要的信息放在文本文件中,然后从测试中读取。