V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
v2byy
V2EX  ›  问与答

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

  •  
  •   v2byy · Jan 6, 2022 · 1614 views
    This topic created in 1572 days ago, the information mentioned may be changed or developed.

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

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

    4 replies    2022-01-07 08:28:42 +08:00
    TimothyT
        1
    TimothyT  
       Jan 6, 2022 via iPhone
    打桩。要么就在写之前把接口类写好,用继承来 mock
    litmxs
        2
    litmxs  
       Jan 7, 2022 via Android
    把 CPP 文件 include 进来
    GeruzoniAnsasu
        3
    GeruzoniAnsasu  
       Jan 7, 2022
    其实没太懂描述的是个什么场景,既然是静态的工具类,那这个类提供的 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  
       Jan 7, 2022 via iPhone
    改动量从大到小:
    封装一层虚接口;
    改造下原代码,看看能不能 set mock 的值进去,或者通过 define public private 的办法;
    用支持打桩的测试框架
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4858 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 09:57 · PVG 17:57 · LAX 02:57 · JFK 05:57
    ♥ Do have faith in what you're doing.