V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
v2byy
V2EX  ›  问与答

c++中如何对一些 util 工具类进行 mock 呢?

  •  
  •   v2byy · 2022-01-06 20:00:59 +08:00 · 998 次点击
    这是一个创建于 838 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如一些工具类直接是 static 的,有什么好的办法进行 mock 测试吗?
    还是说最好不要这样设计?

    还有一些单利类,有什么好的办法 mock 吗?

    4 条回复    2022-01-07 08:28:42 +08:00
    TimothyT
        1
    TimothyT  
       2022-01-06 23:30:16 +08:00 via iPhone
    打桩。要么就在写之前把接口类写好,用继承来 mock
    litmxs
        2
    litmxs  
       2022-01-07 00:30:58 +08:00 via Android
    把 CPP 文件 include 进来
    GeruzoniAnsasu
        3
    GeruzoniAnsasu  
       2022-01-07 06:12:33 +08:00
    其实没太懂描述的是个什么场景,既然是静态的工具类,那这个类提供的 methods/member functions 就应该是可以全局使用且(一般而言应该如此)是无状态的。

    比如一个 method:db->lookup(Query q) 有一个静态版本 DB::lookup(DB* db, Query q),要 mock 的就还是这个 db 对象,跟非静态版本并没有没什么区别。对于 C++来说,class::static_function() 与 namespace::trivial_function() 几乎是等价的,也就访问权限或者说封装程度有差异而已。「 mock 一个 namespace 」听起来就非常不对劲吧,用来封装静态成员的那些类道理是一样的


    mock 单例就更不懂了,难到不是把构造单例实例的方法重写一遍(比如继承下来改一改)就好了吗
    inhzus
        4
    inhzus  
       2022-01-07 08:28:42 +08:00 via iPhone
    改动量从大到小:
    封装一层虚接口;
    改造下原代码,看看能不能 set mock 的值进去,或者通过 define public private 的办法;
    用支持打桩的测试框架
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1675 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:47 · PVG 00:47 · LAX 09:47 · JFK 12:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.