1. Mock与Fake

1.1. fakes(伪对象)和mock(模拟器)在测试驱动开发(TDD)社区中实际上往往意味着非常不同的东西:

  • Fake有工作实现,但通常采取一些捷径(可能使操作更简单),这使得它们不适合生产。内存中的文件系统是一个fake的例子。
  • Mock是预期编程的对象,它们形成它们期望接收的调用的规范。

1.2. 使用Google Mock涉及三个基本步骤:

  1. 使用一些简单的宏描述你想要模拟的接口,他们将扩展到你的mock类的实现;

  2. 创建一些模拟对象,并使用直观的语法指定其期望和行为;

  3. 练习使用模拟对象的代码。 Google Mock会在出现任何违反期望的情况时立即处理。

  4. 在代码中有依赖,比如代码依赖ABC.cpp文件里的方法。这些方法还没有实现,这是应该是拿到了这些包含了这些方法的定义的头文件,ABC.h。

  5. 创建一个Fake程序,Fake_ABC.cpp和Fake_ABC.h. 在Fake_ABC.h里include ABC.h. 并定义新的行为Fake_action_1(), Fack_action_2(). 这些行为多数是用来帮助获取Fake object的状态。

  6. 实现ABC.h里定义的行为,和Fake_ABC.h定义的额外增加的辅助测试的行为

  7. 构建TDD 测试case,写production code

1.3. Mock

  1. Dummy
    对象被四处传递,但是从不被真正使用。通常他们只是用来填充参数列表。

  2. Fake
    有实际可工作的实现,但是通常有一些缺点导致不适合用于产品(基于内存的数据库就是一个好例子)。

  3. Stub
    在测试过程中产生的调用提供预备好的应答,通常不应答计划之外的任何事。stubs可能记录关于调用的信息,比如邮件网关的stub 会记录它发送的消息,或者可能仅仅是发送了多少信息。

  4. Mock
    预先计划好的对象,带有各种期待,他们组成了一个关于他们期待接受的调用的详细说明。