今天看到一位大牛的测试框架中提到fake,特查阅了一下。
mock对象是指对外面依赖系统的模拟,在运行时刻可以根据假设的需求提供期望的结果。fake对象是一种虚假的实现,内部使用了固定的数据或逻辑,只能返回特定的结果。
fack是一种实体的模拟,而mock是对逻辑的模拟。
如何写Fake的方法:
1,在代码中有依赖,比如代码依赖ABC.cpp文件里的方法。这些方法还没有实现,这是应该是拿到了这些包含了这些方法的定义的头文件,ABC.h。
2, 创建一个Fake程序,Fake_ABC.cpp和Fake_ABC.h. 在Fake_ABC.h里include ABC.h. 并定义新的行为Fake_action_1(), Fack_action_2(). 这些行为多数是用来帮助获取Fake object的状态。
3, 实现ABC.h里定义的行为,和Fake_ABC.h定义的额外增加的辅助测试的行为
4,构建TDD 测试case,写production code
Fake更像是Stub,是对被Fake,Stub的对象做简单的返回值处理。多少情况是程序的依赖程序不ready。而Mock是为了验证依赖对象和被测程序的交互。需要花更多的功夫去实现。有时候被Mock对象是硬件依赖的,被Mock对象的实现是存在的,只是不能放入off-target测试环境里。这时候就需要对该对象进行Mock。和上述方法一样,只是需要保证被Mock对象的实现.c,.cpp文件不能在测试项目里面。否则Mock的函数实现和真实代码的函数实现就会重复导致编译链接错误。