当前位置: 首页 > news >正文

福建省建设执业资格中心网站网站开发公司对比

福建省建设执业资格中心网站,网站开发公司对比,wordpress侧边栏加载js,河南建设通网站编写代码有bug是很正常的#xff0c;通过编写完备的单元测试#xff0c;可以及时发现问题#xff0c;并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员#xff0c;为自己的代码编写全面的单元测试是必备的基础技能#xff0c;在编写单元测试的时候…  编写代码有bug是很正常的通过编写完备的单元测试可以及时发现问题并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员为自己的代码编写全面的单元测试是必备的基础技能在编写单元测试的时候也能复盘自己的代码设计是提高代码质量极为有效的手段。 本文主要介绍以下几个方面的内容 1、何为单元测试 2、何为gtest 3、怎么使用gtest 4、怎么运行测试 一 单元测试是什么 单元测试Unit Testing一般指对软件中的最小可测试单元进行检查和验证。最小可测试单元可以是指一个函数、一次调用过程、一个类等不同的语言可能有不同的测试方法暂时不必深究。 对于C/C语言单元测试一般是针对一个函数而言单元测试的目的就是检测目标函数在所有可能的输入下函数的执行过程和输出是否符合预期。可以说单元测试是颗粒度最小的测试对于软件开发而言保证每个小的函数执行正确才能保证利用这些小模块组合起来的系统能够正常工作。 和测试相关的另外一个重要概念是测试用例(Test Case)。百度百科给的定义是测试用例是对一项特定的软件产品进行测试任务的描述体现测试方案、方法、技术和策略包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等。 这个定义是比较广泛的对于单元测试来说就是测试在不同输入下目标函数模块的预期执行过程和输出返回值每个不同的情形可以有一个或多个测试用例。编写测试用例需要尽量覆盖所有输入情况尤其是边界值、特殊值、异常值。比如下列函数  int fibo(int i) {if (i 1 || i 2) {return 1;}return fibo(i - 1) fibo(i - 2);} 这个函数是为了实现斐波那契数列所以输入可以分为几类就可以覆盖所有情况 1. 小于等于0的整数 2. 1和2 3. 大于2的整数 对应地可以设置以下测试用例 1. 输入0期望值是0 2. 输入1期望值是1 3. 输入2期望值是1 4. 输入3期望值是2 5. 输入4期望值是3 可以比较明显地发现如果输入是小于等于0的整数这个函数就一直递归下去了。这也是开发过程中需要注意的代码功能的使用者并不一定会遵循常规的思维斐波那契数列不可能输入负数开发者只能相信自己的代码不要对输入有任何假设。 上述test case在cmake-template项目的test/c/test_gtest_demo.cc中有示例 二 gtest简介 Google Test是Google开源的一个跨平台的C单元测试框架简称gtest它提供了非常丰富的测试断言、判断宏极大方便开发者编写测试用例的流程也是很多开源项目使用的测试框架。 在前面介绍CMake的测试功能时每个单元测试都是一个可执行文件实现了main函数在CMakeLists.txt中使用add_test命令来添加测试用例 enable_testing() add_executable(test_add test/c/test_add.c) add_executable(test_minus test/c/test_minus.c) target_link_libraries(test_add math) target_link_libraries(test_minus math) add_test(NAME test_add COMMAND test_add 10 24 34) add_test(NAME test_minus COMMAND test_minus 40 96 -56) 通过使用gtest可以简化这个流程让开发者可以专注在测试用例的书写上而不用手动编写大量的main函数以及一些判断输出是否符合预期的附加代码。 三 集成gtest 1 将gtest源码加入项目 gtest是一个开源的框架代码位于github仓库google/googletest本文介绍直接将gtest加入到项目中通过CMake编译使用。 首先在项目根目录新建一个third_party目录下载源码的最新release版本并解压 # mkdir third_party # cd third_party # wget https://codeload.github.com/google/googletest/zip/refs/tags/release-1.10.0 # unzip googletest-release-1.10.0.zip 2 将gtest添加为子模块 修改项目根目录的CMakeLists.txt文件使用上一篇文章介绍的命令add_subdirectory在开启单元测试时添加gtest为子模块并将对应头文件路径添加进来 enable_testing() add_subdirectory(third_party/googletest-release-1.10.0) include_directories(third_party/googletest-release-1.10.0/googletest/include) 此时执行命令 # cmake -B cmake-build # cmake --build cmake-build 可以看到构建目录下多了一个目录cmake-build/third_party/googletest-release-1.10.0并且gtest编译生成了4个新的库文件gtest子模块的编译目标位于目录cmake-build/lib下 1. libgtest.a 2. libgtest_main.a 3. libgmock.a 4. libgmock_main.a 其中libgtest.a提供单元测试相关的功能libgtest_main.a提供单元测试的主入口只有链接该库测试用例就会编译成可执行文件两个mock库也是类似的主要提供数据库交互网络连接等方面的模拟测试这不是本文的重点。 此时就可以在链接其他目标时直接使用gtest的这4个编译目标target。 3 编写测试用例 接下来直接修改先前的两个测试用例源文件实现相同的测试功能 1. test/c/test_add.c 2. test/c/test_minus.c 因为使用的是C测试框架所以上述两个源文件修改为.cc后缀。 在源文件中include头文件gtest/gtest.h使用gtest测试用例定义宏来定义测试用例 TEST(test_case_name, test_name) {} 一个test_case_name下面可以包含多个不同test_name的测试。 test/c/test_add.cc内容为 #include gtest/gtest.h #include math/add.h TEST(TestAddInt, test_add_int_1) { int res add_int(10, 24); EXPECT_EQ(res, 34); } test/c/test_minus.cc内容为 #include gtest/gtest.h #include math/minus.h TEST(TestMinusInt, test_minus_int_1) { int res minus_int(40, 96); EXPECT_EQ(res, -56); } 显而易见测试用例的代码量比之前少了很多而且更加可读更加专业。 这里使用了一个判断值相等的断言EXPECT_EQgtest中的断言分成两大类 1. ASSERT_*系列如果检测失败就直接退出当前函数 2. EXPECT_*系列如果检测失败发出提示并继续往下执行 gtest有很多类似的宏用来判断数值的关系、判断条件的真假、判断字符串的关系。 对于条件判断可以使用 ASSERT_TRUE(condition);  // 判断条件是否为真 ASSERT_FALSE(condition); // 判断条件是否为假 对于数值比较可以使用 ASSERT_EQ(val1, val2); // 判断是否相等 ASSERT_NE(val1, val2); // 判断是否不相等 ASSERT_LT(val1, val2); // 判断是否小于 ASSERT_LE(val1, val2); // 判断是否小于等于 ASSERT_GT(val1, val2); // 判断是否大于 ASSERT_GE(val1, val2); // 判断是否大于等于 对于字符串比较可以使用 ASSERT_STREQ(str1,str2); // 判断字符串是否相等 ASSERT_STRNE(str1,str2); // 判断字符串是否不相等 ASSERT_STRCASEEQ(str1,str2); // 判断字符串是否相等忽视大小写 ASSERT_STRCASENE(str1,str2); // 判断字符串是否不相等忽视大小写 4 添加测试用例 书写好测试用例源文件后需要修改项目根目录的CMakeLists.txt enable_testing() add_subdirectory(third_party/googletest-release-1.10.0) include_directories(third_party/googletest-release-1.10.0/googletest/include) set(GTEST_LIB gtest gtest_main) add_executable(test_add test/c/test_add.cc) add_executable(test_minus test/c/test_minus.cc) target_link_libraries(test_add math gtest gtest_main) target_link_libraries(test_minus math gtest gtest_main) add_test(NAME test_add COMMAND test_add) add_test(NAME test_minus COMMAND test_minus) 对于一个单元测试来说添加的步骤为 1. 使用add_executable添加测试目标 2. 使用target_link_libraries为测试目标添加依赖gtest和gtest_main 3. 使用add_test添加到项目以便可以使用ctest命令执行测试 需要注意的不同就是依旧将单元测试的源文件编译为可执行文件并且链接的时候链接了gtest和gtest_main。必须要链接gtest_main库才能给单元测试添加main函数主入口否则在链接的时候将会报错。 5 运行测试 在前面的文章中已经介绍过了在构建编译完成后进入构建目录使用ctest命令执行测试即可。 笔者常用的命令为 make test CTEST_OUTPUT_ON_FAILURETRUE GTEST_COLORTRUE # 或者 GTEST_COLORTRUE ctest --output-on-failure 指定--output-on-failure或者设置CTEST_OUTPUT_ON_FAILURE变量为TRUE让单元测试失败时输出具体信息而GTEST_COLOR设置为TRUE可以让输出带有颜色可以在详细输出模式下-VV更快找到错误的输出如果有失败的测试。 这里的单元测试也只是作为示例在真实的项目中单元测试的编写往往更加复杂而且这也还只是提高的软件鲁棒性中的一环追求极致还需要更多努力。 【整整200集】超超超详细的Python接口自动化测试进阶教程真实模拟企业项目实战
http://www.hkea.cn/news/14386025/

相关文章:

  • 如何制作网站策划书商城网站离不开支付系统
  • 网站系统怎么做的做电话销售需要的网站
  • 一键查询注册过的网站wordpress 主题替换
  • 美工需要的网站上海工商网上公示
  • wordpress建的网站打开太慢欧莱雅网站建设与推广方案
  • jsp网站开发介绍wordpress cms主题教程
  • 企业网站建设专业公司中国十佳网站建设公司
  • 深圳定制工作装seo优化网络推广
  • 招标网最新招标公告百度网站如何优化排名
  • 云霄网站建设wordpress 谷歌字体 360
  • 如何制作推广网站哪个网站可以做一对一老师
  • wordpress 站群软件做网站要会哪些知识
  • 网站建设的主要作用wordpress等待响应
  • 网站建设必须要服务器吗昆明网站建设织梦
  • 商城网站怎么做内链劳务派遣做网站的好处
  • 网站开发课程设计参考文献网站源码商城
  • wordpress 站外调用毕业设计网站建设选题依据
  • 杭州营销型网站pc端网站建设价格明细表
  • 生态文明建设网站专题培训石家庄做网站公司
  • 品牌建设的规划与实施汕头seo公司
  • 企业做网站要多少钱百度网盘搜索引擎网站
  • 建设集团招聘网站优化外包公司
  • 企业网站seo运营口碑营销方案怎么写
  • 网站空间是指什么住建综合管理平台
  • 网站建设设计贵吗微信小程序源码网站
  • 印刷网站开发策划书微信电子宣传册制作app
  • 搜索引擎和门户网站的区别全球十大摄影作品
  • 广州网站开发招聘信息soso搜搜
  • 庐江住房建设局网站开发公司网签的流程
  • 兰陵网站建设网站建设软文推广