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

2022-01-06 20:00:59 +08:00
 v2byy

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

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

1008 次点击
所在节点    问与答
4 条回复
TimothyT
2022-01-06 23:30:16 +08:00
打桩。要么就在写之前把接口类写好,用继承来 mock
litmxs
2022-01-07 00:30:58 +08:00
把 CPP 文件 include 进来
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
2022-01-07 08:28:42 +08:00
改动量从大到小:
封装一层虚接口;
改造下原代码,看看能不能 set mock 的值进去,或者通过 define public private 的办法;
用支持打桩的测试框架

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826664

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX