????C++ ????з????????????????????????в????????????????? gtest ???????????????????????????????
????1. ?·
?????????????????????????????????????TestSuite ?????????????????????????????????????????????????test_* ?????????
class MyTest : public TestSuite {
voidsetup(){...}
voidteardown(){...}
voidtest_1(){...}
voidtest_2(){...}
}
Test::runAllTests();
???????C++ ????з?????????????????????????????????ò?????????????????????????????? MyTest ??????????????? test_* ?????????????
????????????????????
MyTest() {
vector<void (*)()> test_funcs;
test_funcs.push_back(&test_1);
...
}
????????????????????????????????д???push_back ????????????????????а???????????????????????
??????????????ú???????????????????????????????б??У?
????#defineauto_invoke(func) func_list.append(func)
?????????????????????????????????У??????????????????á?
????????????????????????????δ?????δ????????? Test::runAllTests() ????У?
????2. ????
?????????????????????????????????????????????У??????????? class MyTest ???????????????????????????????????????????и??????????????????????? push_back() ??С??????????????????????????????
????class MyTest : public TestSuite {
????static int invoke_time;
????voidadd_test(test_name){...}
????}
????static MyTest::invoke_time = push_all_func();
????????????????????????????????????????????????????????????????Ρ???????а???????θ??????У???????壬?????????????????static ???????????????????????????????????????????????????????????????????
#defineADDTEST(parent_class?? func_name)
class GENERATE_CLASS_NAME(parent_class?? func_name) : public parent_class {
public:
GENERATE_CLASS_NAME(parent_class?? func_name)() {}
void TestBody();
void before() {...}
void after() {...}
private:
static const unsigned long __a_trick__;
};
const unsigned long GENERATE_CLASS_NAME(parent_class?? func_name)::__a_trick__ =
Test::get_instance()->add_test(new GENERATE_CLASS_NAME(parent_class?? func_name));
void GENERATE_CLASS_NAME(parent_class?? func_name)::TestBody()
// add a test function
ADDTEST(BasicTest?? test_neq) {
neq(a?? b);
};
?????????????????е????????????????? Singleton ??
class Test {
private:
Test() {}
std::vector<TestSuite *> testCases;
public:
staticTest *get_instance(){
static Test instance;
return &instance;
}
voidrun(){...}
unsignedlongadd_test(TestSuite *test_case){
testCases.push_back(test_case);
return testCases.size();
}
};
?????????????????????????д??????????
class BasicTest : public TestSuite {
protected:
int a?? b;
public:
voidsetup(){
a = 1234;
b = 4321;
}
voidteardown(){
}
};
ADDTEST(BasicTest?? test_neq) {
neq(a?? b);
};
ADDTEST(BasicTest?? test_eq) {
a = b = 10;
eq(a?? b);
}
intmain(){
Test::get_instance()->run();
}
???????? ADDTEST ??????????????? BasicTest ?????????? BasicTest ???????????й?????????????? ADDTEST ??????????? a??b ??????????????????????????????????в?????????????????????????? https://github.com/ay27/simplest_unittest
????3. ???
????????????????????????
????#defineADDTEST(func_name)
????void __func_name__() {
????func_list.push_back(&func_name);
????}
????void func_name()
????????????δ????е?push_back ?????????С?
?????????£????????????????????????????? Singleton Test ??????????????е????????????????????static ???????????????ε?????