模拟框架是否只支持编写单元测试,还是有开发人员使用它们的其他情况?
是否存在在测试区域外有用的情况?
答案 0 :(得分:1)
如果您需要在测试环境之外扩展/更改类行为,则可以扩展/修改/子类化相关类。
模拟发生在源代码中,就像子类化一样,因此没有任何好处。模拟不会在运行时环境之外持久存在,因此它们不是可部署的工件。模拟不包括明确定义的行为。
可能可能在测试之外是他们的合法用途,但我很难找到一个AOP不会更好的服务。
答案 1 :(得分:1)
模拟对象的重点是它们“不是真正的”对象。至少“不真实”在某种意义上它们是“不是生产”的对象。这几乎就是定义,对你的问题做出简短回答:不。
然而,那说:你可以很容易地找到一个模拟对象,你后来发现它在生产代码中具有功能目的。
一个简单的例子是,如果你编写了一个模拟对象来实现一个特定的接口,但实现该接口的所有方法都不做任何事情。这也称为 null实现对象 空的实现对象确实在生产代码中起到了有用的作用,有一天你可能决定在生产代码中使用该实现。虽然在执行此操作时,您不应再将该对象视为模拟对象。您可以在生产代码中定义null实现对象,并将测试用例更改为使用null实现对象。
一个实际例子:
if assigned(Logger) then Logger.write(...)
。Logger
设置为空实现对象。