每次使用不同的fixture多次执行一个测试用例
Execute one test case several times with different fixture each time
我有一个测试用例,我想针对数据库的不同状态执行它。我将对象插入fixture中的DB(我希望保持这种方式)。我想为数据库虚拟化的初始化方法,并为数据库中的不同配置专门化fixture。
我能想到的一种方法是做一些类似的事情:
void doTest(){
//test code here
}
BOOST_FIXTURE_TEST_CASE(test1, fixture1)
{
doTest();
}
BOOST_FIXTURE_TEST_CASE(test2, fixture2)
{
doTest();
}
BOOST_FIXTURE_TEST_CASE(test3, fixture3)
{
doTest();
}
但是有更干净、更整洁的方法吗?或者也许我不应该这么做?我将感谢测试专家的任何建议。
您可以使用BOOST_FIXTURE_TEST_CASE_TEMPLATE
实例化多个测试:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE TestModuleName
#include <boost/test/unit_test.hpp>
#include <boost/mpl/vector.hpp>
struct Fixture1 { int i; Fixture1() : i(1) {} };
struct Fixture2 { int i; Fixture2() : i(2) {} };
struct Fixture3 { int i; Fixture3() : i(3) {} };
typedef boost::mpl::vector<Fixture1, Fixture2, Fixture3> Fixtures;
BOOST_FIXTURE_TEST_CASE_TEMPLATE(Test, T, Fixtures, T){
std::cout << T::i << "n";
}
将打印
1
2
3
此代码为mpl::vector
"Fixtures"中的每种类型实例化一个自己的测试用例。每个夹具类型将作为T
(BOOST_FIXTURE_TEST_CASE_TEMPLATE
的第二个参数)传入,T
将用作测试用例的夹具(最后一个参数)。
洞穴
由于测试用例(类)的模板性质,您需要在T::
之前访问fixture成员,以指示它们是(模板参数)依赖名称。
改进
因为BOOST_FIXTURE_TEST_CASE_TEMPLATE
是如此通用,人们可能想定义一个方便的"快捷方式",它更明确地说明正在做的事情:
#define MULTI_FIXTURE_TEST_CASE(NAME, TPARAM, ...)
typedef boost::mpl::vector<__VA_ARGS__> NAME##_fixtures;
BOOST_FIXTURE_TEST_CASE_TEMPLATE(NAME, TPARAM, NAME##_fixtures, TPARAM)
MULTI_FIXTURE_TEST_CASE(Test, T, Fixture1, Fixture2, Fixture3){
std::cout << T::i << "n";
}
正如您所看到的,它在某种程度上隐藏了mpl::vector
。我认为最好在它自己的头中定义这个宏,它也执行#include <boost/mpl/vector.hpp>
,以避免丢失依赖项。fixtures列表名称是测试用例的名称加上"_fixtures",因此希望它不会与现有名称冲突,并且有一定的意义。
相关文章:
- pybind11 运行测试用例
- GTest,仅参数化测试用例
- 如何使用不同的谷歌模拟运行相同的谷歌测试用例?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 如何使用值模板编写文档测试用例?
- 用于查找最低共同祖先的代码不适用于某些测试用例
- 为什么给定的代码不适用于所有测试用例?为什么当输入为 7786 时它不起作用?
- GTest - 在不同的参数上运行多个测试用例
- 如何创建演示 /EH 成本的最小测试用例?
- 查找在 4 和问题中代码失败的测试用例
- 如何编写在函数执行过程中垃圾回收的测试用例?
- 括号检查器完美地适用于单个测试用例,但对于所有测试用例,它给出了分段错误?
- 我已经通过了该问题的所有测试用例,甚至是Udebugg上的所有测试用例,并且仍然在UVA在线法官上获得了WA裁决
- 如何使用参数化测试用例
- 相同的测试用例,但代码块和Ideone的输出不同
- 在老板层次结构中查找"top"老板仅适用于某些测试用例
- 每次使用不同的fixture多次执行一个测试用例
- 当我采用测试用例数 = 1 时,我的程序终止.其他明智的是,它给出了正确的答案,但跳过了最后一个测试用例
- 如何为一个c++程序提供测试用例,如果QA部门拒绝它怎么办?
- 如何在谷歌测试中为一个夹具运行多个测试用例