zoukankan      html  css  js  c++  java
  • MySQL gunit 运行

    MySQL源码的unittest文件夹下虽然有基于googletest实现的unittest,但是默认是不运行的,因为MySQL默认不带googletest。两种方式可以使其编译运行:

    1. 自动下载。保证编译机器可以连github,cmake的时候加个 -DENABLE_DOWNLOADS=1 ,它会自动从github下载对应版本的googletest。
    2. 本地zip。去看下 gunit/CMakeLists.txt,看下他要的googletest是什么版本(在里面可能也写成gmock,googletest包含gtest和gmock两个模块),8.0.16之前依赖的是 googletest-1.8.0,找到对应的tag,下载zip(命名为 release-1.8.0.zip )。然后cmake 加个-DLOCAL_GMOCK_ZIP=/path/to/release-1.8.0.zip

    按照官网加GTEST_PREFIX试了发现是没效的,以上是根据 MySQL/unittest/gunit/CMakeLists.txt 发现的办法。


    由于默认不带gunit编译,如果是内部迭代后,有可能MySQL unittest部分编译不过。目前发现的可能会影响编译的是:

    1. tap_event_listener.cc:test_part_result_type_tostring 的一个switch语句,加个default分支把最后的return "" 放进default中。
    2. fake_table.h: #include "gmock/gmock-generated-nice-strict.h" 改成 #include "gmock/gmock-nice-strict.h" ,具体参见source_downloads下面的实际是什么样的文件,不要看原来zip的,它会变的。

    可以单独编译自己想要的 -t 结尾的测试案例,比如 make union_syntax-t -j32 ,编译出来的bin在build/runtime_output_directory,具体不同编译方式的请查看make的日志,最后有写bin输出到哪个目录的。


    需注意的是,MySQL的unittest白盒单测实际还比较少,更多是基于sql去做黑盒查询测试,mysqltest下的sql覆盖的会比较全。这里会导致一个MySQL开发者常见的问题,原有功能能跑,基于他的语义想去自己改改其他发现就踩坑了。换句话说,MySQL保证了某模块功能在MySQL现有路径是对的,但是没有保障模块功能它的期望语义的完整性和正确性(因为MySQL原生路径不需要用到完整的语义)。

    同时,gunit下面暂未提供一个fake server实例,因此部分模块功能比较依赖整个server路径的没办法单测,只能通过sql 覆盖去测试。

  • 相关阅读:
    rails采用MongoDB感觉相当不错!
    LWC: 将VF页面显示在LWC中
    Salesforce: System.TypeException: Invalid integer: 2185340704
    Salesforce: Report没有权限访问
    Maven Archetype 多 Module 自定义代码脚手架
    2021年度总结
    [转摘]Lucene学习总结之一:全文检索的基本原理
    DataTable.Rows.Remove(row) 与 DataTable.Rows[i].Delete()区别
    Lucene.net根据Sort走到了不同的类处理
    调用腾讯QQ天气预报的JS代码
  • 原文地址:https://www.cnblogs.com/lhfcws/p/mysql_gunit_run.html
Copyright © 2011-2022 走看看