Closed huso1101 closed 2 years ago
两个方案,一个是在测试用例集里面用
#define protected public
XD,有点脏。
还有一个是用类反射,用字符串函数签名式获取函数地址的方案 https://github.com/ez8-co/emock/blob/865bcda180b9eeecf9e7ca06b022649abf761a58/tests/ut/TestOverloadMethodMocker.h#L106
类似:EMOCK("*::CUT::bar(double)"),但是这个功能未开发完全,目前只能临时尝试使用
这里的函数名支持通配符匹配,*贪婪匹配,?是单字符匹配。
HHH,方案一好呀。试了一下把宏定义放到头文件前完美解决,private方法也可以这样用了^_^
#define protected public
#include "FooA.h"
这样完全不修改项目源码的情况可以实现mock 类FooA内所有函数,已经符合我的预期了٩( 'ω' )و 蟹蟹!
方案二这个功能我先留作备用方案啦
👍,反射功能我有空也继续弄完它,: )
👍,反射功能我有空也继续弄完它,: ) 加油,刚刚我试急了,函数体写头文件里没问题,函数体写其他文件就有问题了...
// FooA.h class FooA { protected: void GetValue(); };
// FooA.cpp
void FooA::GetValue() { return 0; }
// TestFooA.cpp
TEST(TestFooA, test1) {
}
上述写法会出现连接错误,无法解析的外部符号public FooA::GetValue,FooA.cpp里的FooA::GetValue属性是protected的。。看来还得尝试一下反射功能
是的,如果是以动态库的方式引入可能会有“无法解析的外部符号”的错误信息,因为我们告诉他方法是可见的,但是他看不见。
你好,请教一下,emock是否可以mock 类protected属性函数的方法呢? 我用一个测试类TestClass继承类BaseFoo,然后在TestClass里边是可以访问到BaseFoo的protected方法, 但由于无法对protected的方法取地址所以无法使用EMOCK。 如果有方法取得protected属性的成员函数地址,应该可以解决我的问题。大佬有没有什么建议?