Stub
一个有助于运行测试的虚拟对象。 在某些可以硬编码的条件下提供固定的行为。 从未测试stub的所有其他行为。
例如,对于空栈,你可以创建一个对于 empty() 方法只返回 true 的 stub。因此这并不关心栈中是否存在元素。
Mock模拟
一个虚拟对象,其中最初设置了某些属性。 此对象的行为取决于设置的属性。 也可以测试对象的行为。
例如,对于 Customer对象,你可以通过设置姓名和年龄来模拟它。你可以将年龄设置为 12,然后测试isAdult()方法,该方法将在大于 18 岁时返回 true。因此你的 Mock Customer 对象适用于指定的条件。
在软件开发中,Mock和Stub都是测试中常用的概念。
Mock是一个用于模拟对象行为、产生特定响应的对象。它通常用于测试中,用来替代真实的对象以便进行更加可控的测试。Mock对象可以预先定义特定的输入和对应的输出,在测试过程中将会返回这些预定义的输出数据。Mock还可以用来验证某个特定方法是否被调用、被调用的次数以及传入的参数。
Stub是一个用于替代真实对象的占位对象。与Mock不同的是,Stub对象并不关心特定的输入和对应的输出,它只是提供一些固定的返回值。Stub主要用于测试中的边界情况或者临时占位,以便在测试中能够继续进行下去。
项目案例
Mock和Stub是测试中常用的两种技术,用于模拟和替代外部依赖以进行单元测试。Mock用于创建一个虚拟的对象,用于模拟实际对象的行为,而Stub用于替代实际对象,提供一个预定义的行为。下面是一个关于Mock和Stub的示例和代码。
假设我们有一个名为Calculator的类,用于执行基本的数学计算。Calculator类依赖于一个名为MathUtil的工具类,用于执行实际的数学计算。
class MathUtil:
def add(self, a, b):