我如何 运行 具有多组初始条件的测试?
How do I run a test with multiple sets of initial conditions?
我目前有一套测试,它们是测试夹具的一部分。
我也想 运行 使用不同的测试夹具进行同一组测试。
如何在不必实际复制粘贴测试和 'manually' 更改测试夹具名称(如下所示)的情况下执行此操作?
class Trivial_Test : public ::testing::Test
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
initial_condition = 0;
}
void TearDown()
{
shutdown_logger();
}
protected:
int initial_condition;
};
class Trivial_Test_01 : public ::testing::Test
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
initial_condition = 1;
}
void TearDown()
{
shutdown_logger();
}
protected:
int initial_condition;
};
TEST_F(Trivial_Test, valid_input_1)
{
EXPECT_TRUE(random_num()+initial_condition < 255);
}
TEST_F(Trivial_Test_01, valid_input_1)
{
EXPECT_TRUE(random_num()+initial_condition < 255);
}
是否有更简洁的方式将 valid_input_1
与 Trivial_Test
和 Trivial_Test_01
相关联?
P.S。 - 上面显示的测试用例是一个简单的测试,名义上代表了我的实际情况,但远不及我实际处理的测试用例或测试装置的复杂性。
您可以使用夹具中的方法执行此操作 class。以下是您如何为您执行此操作的示例:
class Trivial_Test : public ::testing::Test
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
}
void TearDown()
{
shutdown_logger();
}
setup_initial_condition(int value)
{
initial_condition = value;
}
protected:
int initial_condition;
};
TEST_F(Trivial_Test, valid_input_1)
{
setup_initial_condition(0);
EXPECT_TRUE(random_num()+initial_condition < 255);
}
TEST_F(Trivial_Test, valid_input_2)
{
setup_initial_condition(1);
EXPECT_TRUE(random_num()+initial_condition < 255);
}
你考虑过value parameterized tests吗?
也许对于您的实际测试用例,它增加了太多的复杂性,但您的示例看起来像:
class Trivial_Test : public ::testing::TestWithParam<int>
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
}
void TearDown()
{
shutdown_logger();
}
};
TEST_F(Trivial_Test, valid_input)
{
int initial_condition = GetParam();
EXPECT_TRUE(random_num()+initial_condition < 255);
}
INSTANTIATE_TEST_CASE_P(ValidInput,
Trivial_Test,
::testing::Values(0, 1));
我目前有一套测试,它们是测试夹具的一部分。 我也想 运行 使用不同的测试夹具进行同一组测试。
如何在不必实际复制粘贴测试和 'manually' 更改测试夹具名称(如下所示)的情况下执行此操作?
class Trivial_Test : public ::testing::Test
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
initial_condition = 0;
}
void TearDown()
{
shutdown_logger();
}
protected:
int initial_condition;
};
class Trivial_Test_01 : public ::testing::Test
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
initial_condition = 1;
}
void TearDown()
{
shutdown_logger();
}
protected:
int initial_condition;
};
TEST_F(Trivial_Test, valid_input_1)
{
EXPECT_TRUE(random_num()+initial_condition < 255);
}
TEST_F(Trivial_Test_01, valid_input_1)
{
EXPECT_TRUE(random_num()+initial_condition < 255);
}
是否有更简洁的方式将 valid_input_1
与 Trivial_Test
和 Trivial_Test_01
相关联?
P.S。 - 上面显示的测试用例是一个简单的测试,名义上代表了我的实际情况,但远不及我实际处理的测试用例或测试装置的复杂性。
您可以使用夹具中的方法执行此操作 class。以下是您如何为您执行此操作的示例:
class Trivial_Test : public ::testing::Test
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
}
void TearDown()
{
shutdown_logger();
}
setup_initial_condition(int value)
{
initial_condition = value;
}
protected:
int initial_condition;
};
TEST_F(Trivial_Test, valid_input_1)
{
setup_initial_condition(0);
EXPECT_TRUE(random_num()+initial_condition < 255);
}
TEST_F(Trivial_Test, valid_input_2)
{
setup_initial_condition(1);
EXPECT_TRUE(random_num()+initial_condition < 255);
}
你考虑过value parameterized tests吗?
也许对于您的实际测试用例,它增加了太多的复杂性,但您的示例看起来像:
class Trivial_Test : public ::testing::TestWithParam<int>
{
void SetUp()
{
ASSERT_TRUE(SUCCESS == init_logger());
}
void TearDown()
{
shutdown_logger();
}
};
TEST_F(Trivial_Test, valid_input)
{
int initial_condition = GetParam();
EXPECT_TRUE(random_num()+initial_condition < 255);
}
INSTANTIATE_TEST_CASE_P(ValidInput,
Trivial_Test,
::testing::Values(0, 1));