unit-testing - 将模拟框架用于其他东西然后进行单元测试?

标签 unit-testing testing mocking

mock 框架只是支持编写单元测试,还是开发人员会在其他情况下使用它们?

在测试区域之外是否存在它们有用的情况?

最佳答案

模拟对象的全部意义在于它们“不是真实的”对象。至少在它们不是“生产”对象的意义上“不真实”。根据定义,这几乎是对您问题的简短回答:不。

但是,就是说:您很容易发现自己拥有一个模拟对象,您后来发现它在生产代码中具有功能性目的。

一个简单的例子是,如果您编写了一个模拟对象来实现一个特定的接口(interface),但是实现该接口(interface)的所有方法什么都不做。这也称为空实现对象。
空实现对象在生产代码中确实起到了有用的作用,有一天您可以决定在您的生产代码中使用该实现。虽然当您这样做时,您不应再将该对象视为 mock 对象。您将在生产代码中定义 null 实现对象,并更改您的测试用例以使用 null 实现对象。

举个实际例子:

  • 如果您的某些被测代码调用记录器,您通常不希望您的测试用例费心首先设置一个临时日志文件,该文件也必须被删除。
  • 因此,您的测试用例可能会定义一个模拟记录器,它是一个空实现对象,并确保测试框架内的日志记录使用它。
  • 稍后您可能决定向您的应用程序添加一项功能以禁用日志记录。
  • 您不想在每次调用记录器时都编写 if assigned(Logger) then Logger.write(...)
  • 因此,只要禁用日志记录,您的应用程序就会将 Logger 设置为空实现对象。

关于unit-testing - 将模拟框架用于其他东西然后进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16262212/

相关文章:

ruby-on-rails - 使用 FactoryGirl 加速模型规范中的关联 - create vs build vs build_stubbed

java - 测试随机生成的案例

google-analytics - 是否可以运行查询的模拟数据分析工具?

php - 使用 Codeception 运行现有的 Laravel 5.1 PHPUnit 测试

c# - 我们应用程序中的主机单元测试框架? (Nunit、xUnit、MsTest)

testing - 如何对 Liferay 网页进行压力测试?

unit-testing - 如何将远程用户设置为 Jersey 客户端?

.net - 如何模拟 System.Data.Linq.Table<MyClass>

java - EasyMock 期望使用 void 方法和对象数组作为参数?

testing - 我如何测试我的哈希函数在最大负载方面是否良好?