比如一些工具类直接是 static 的,有什么好的办法进行 mock 测试吗?
还是说最好不要这样设计?
还有一些单利类,有什么好的办法 mock 吗?
1
TimothyT 2022-01-06 23:30:16 +08:00 via iPhone
打桩。要么就在写之前把接口类写好,用继承来 mock
|
2
litmxs 2022-01-07 00:30:58 +08:00 via Android
把 CPP 文件 include 进来
|
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 单例就更不懂了,难到不是把构造单例实例的方法重写一遍(比如继承下来改一改)就好了吗 |
4
inhzus 2022-01-07 08:28:42 +08:00 via iPhone
改动量从大到小:
封装一层虚接口; 改造下原代码,看看能不能 set mock 的值进去,或者通过 define public private 的办法; 用支持打桩的测试框架 |