| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
单元测试是软件开发过程中最低级别的测试环节,一般由编码人员自己完成,其目的是隔离程序部件,并证明这些单个部件满足预期的功能。好的单元测试需要具备一下特点:
支持死亡测试,与gmock搭配,但是它需要嵌入到项目中作为源代码进行编译,并且与Catch2和boost.test相比具有大量的宏,不方便记忆。
只要头文件,跨平台,不需要写main函数。 REQUIRE和CHECK宏几乎能够进行任何比较,便于使用。 比如浮点数比较, gtest的EXPECT_FLOAT_EQ(0, a) 可以使用 CHECK (a == Approx (0).margin (some_eps)) 字符串比较,gtest的 EXPECT_STREQ 可以使用 CHECK_THAT (str, Catch::Equals ("Expected str")) 支持BDD测试用例:
SCENARIO("BDD test with zero", "[bdd]")
{
WHEN("The number is 0") {
THEN("The result is 0") {
REQUIRE(fizzbuzz(0) == "0");
}
}
}
不再需要fixtures:
TEST_CASE("DateTime", "[core]")
{
const DateTime dt (1969, 7, 20, 20, 17, 40, 42, DateTimeReference::Utc);
SECTION("GetYear")
{
CHECK (dt.GetYear () == 1969);
}
SECTION("GetMonth")
{
CHECK (dt.GetMonth () == 7);
}
}
不足: 可以使用Fakeit进行mock,但是该框架相比gmock还是不够完整,死亡测试, 编译较久且生产的测试文件相对较大.
支持DDT数据驱动测试,便于移植和修改,能够很好的处理异常和崩溃, 支持套件测试. 不足: 不支持mock,但是可以搭配boost.turtle实现类似的工作,使用boost比较麻烦,略显臃肿。
所有3个框架都支持自动化测试,输出xml报告, 在cmake项目中可以一次性运行所有测试。如果需要一个完整的测试解决方案,可以选择gtest/gmock。 如果需要DDT数据驱动测试,可以使用boost.test + boost.turtle。 而Catch更轻巧,简洁好看,如果只想使用一堆单元测试,可以考虑它。 甚至可以将它与boost.turtle或者Fakeit集成在一起,但有点麻烦。
第一个链接是各个单元测试框架的支持特性汇总表。
| Back | FazBrowse Home | New Git URL |