单元测试和外部资源
Posted
技术标签:
【中文标题】单元测试和外部资源【英文标题】:Unit Testing and External Resources 【发布时间】:2010-10-09 22:46:15 【问题描述】:我对单元测试有点陌生,但我最近看到它非常有用。我已经看到大多数单元测试都是自运行的。事实上,大多数单元测试框架都提供了一种同时运行多个测试的方法(例如对整个系统进行单元测试)。
我想知道;您如何处理自运行单元测试中的外部资源?我喜欢测试整个系统并查看哪些类失败的想法,但是一个类可以,例如,从上传的图像创建缩略图。当依赖于上传图像时,该测试如何自行运行?我会保留一个图片目录,并“假装”在测试中上传其中一张吗?
对此事的任何想法将不胜感激。
【问题讨论】:
【参考方案1】:如果您计划测试外部资源,那么它将是集成测试。在纯单元测试中 -> 要测试外部资源,您必须模拟外部资源。因此,在这种情况下,您创建一个 IDirectory 接口,然后使用 FakeDirectory 类,然后使用 FakeDirectory 来“上传”图像。当您实际使用该应用程序时,您将传递一个实际目录。
在集成测试中,您可以有一个设置类来完成所有设置工作,然后您将进行测试。
【讨论】:
【参考方案2】:我在对我的 php 类进行单元测试时遇到了同样的情况。有些函数可以在不使用任何其他资源的情况下进行测试(单元测试),但许多函数执行文件读/写操作或需要数据库访问(集成测试)。为了测试这些功能,我将单元测试与集成测试结合起来。在我的 setUp 和 tearDown 测试类中,它可能会加载数据库模式或从类函数所需的本地 test_data/ 目录中获取测试数据。
【讨论】:
【参考方案3】:如果您需要测试用户输入会发生什么,您确实需要一些示例数据。包含图像、文本文件、PDF 或其他任何需要的目录,应该在你的单元测试中。或者,您可以在测试中以编程方式生成随机数据。
【讨论】:
【参考方案4】:是的,理想情况下,创建缩略图的类可以使用您在单元测试目录中作为资源提供的占位符图像。您应该能够单独测试该类,尽可能少地依赖应用程序的其余部分。这就是人们建议将代码设计为“可测试”时的意思。
【讨论】:
【参考方案5】:模拟外部依赖。我没有真正的 php 模拟经验,但我已经在网上看到了足够的资源,只是在谷歌上搜索了 mock 和 php,它正在完成
【讨论】:
以上是关于单元测试和外部资源的主要内容,如果未能解决你的问题,请参考以下文章