mock 框架只是支持编写单元测试,还是开发人员会在其他情况下使用它们?
在测试区域之外是否存在它们有用的情况?
最佳答案
模拟对象的全部意义在于它们“不是真实的”对象。至少在它们不是“生产”对象的意义上“不真实”。根据定义,这几乎是对您问题的简短回答:不。
但是,就是说:您很容易发现自己拥有一个模拟对象,您后来发现它在生产代码中具有功能性目的。
一个简单的例子是,如果您编写了一个模拟对象来实现一个特定的接口(interface),但是实现该接口(interface)的所有方法什么都不做。这也称为空实现对象。
空实现对象在生产代码中确实起到了有用的作用,有一天您可以决定在您的生产代码中使用该实现。虽然当您这样做时,您不应再将该对象视为 mock 对象。您将在生产代码中定义 null 实现对象,并更改您的测试用例以使用 null 实现对象。
举个实际例子:
- 如果您的某些被测代码调用记录器,您通常不希望您的测试用例费心首先设置一个临时日志文件,该文件也必须被删除。
- 因此,您的测试用例可能会定义一个模拟记录器,它是一个空实现对象,并确保测试框架内的日志记录使用它。
- 稍后您可能决定向您的应用程序添加一项功能以禁用日志记录。
- 您不想在每次调用记录器时都编写
if assigned(Logger) then Logger.write(...)
。 - 因此,只要禁用日志记录,您的应用程序就会将
Logger
设置为空实现对象。
关于unit-testing - 将模拟框架用于其他东西然后进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16262212/