Php 单元测试和外部资源

Php 单元测试和外部资源,php,unit-testing,Php,Unit Testing,我对单元测试有点陌生,但我最近看到它是如何非常有用的。我已经看到大多数单元测试都是自运行的。事实上,大多数单元测试框架提供了一种同时运行多个测试的方法(例如对整个系统进行单元测试) 我想知道;在自运行单元测试中如何处理外部资源?我喜欢测试整个系统并查看哪些类失败的想法,但例如,一个类可以从上传的图像创建缩略图。当该测试依赖于上传图像时,它将如何自动运行?我会保留一个图像目录,并在测试中“假装”上传其中一个吗 如果您对这件事有任何想法,我们将不胜感激。如果您需要测试用户输入的结果,那么您手头确实需

我对单元测试有点陌生,但我最近看到它是如何非常有用的。我已经看到大多数单元测试都是自运行的。事实上,大多数单元测试框架提供了一种同时运行多个测试的方法(例如对整个系统进行单元测试)

我想知道;在自运行单元测试中如何处理外部资源?我喜欢测试整个系统并查看哪些类失败的想法,但例如,一个类可以从上传的图像创建缩略图。当该测试依赖于上传图像时,它将如何自动运行?我会保留一个图像目录,并在测试中“假装”上传其中一个吗


如果您对这件事有任何想法,我们将不胜感激。

如果您需要测试用户输入的结果,那么您手头确实需要一些示例数据。单元测试中应该有一个包含图像、文本文件、PDF或其他所需内容的目录。或者,您可以在测试中以编程方式生成随机数据。

如果您计划测试外部资源,那么这将是集成测试。在纯单元测试->中,为了测试外部资源,您必须模拟外部资源。因此,在本例中,您创建一个IDirectory接口,然后使用FakeDirectory类,然后使用FakeDirectory“上载”图像。当您实际使用应用程序时,您将传递一个实际目录


在集成测试中,您可以拥有一个安装类,该类将完成所有设置工作,然后进行测试。

是的,理想情况下,创建缩略图的类可以使用您提供的占位符图像作为单元测试目录中的资源。您应该能够独立地测试该类,并且尽可能少地依赖于应用程序的其余部分。当人们建议将代码设计为“可测试”时,这就是他们的意思。

模拟外部依赖关系。我没有在php中进行模拟的实际经验,但我在网上看到了足够多的资源,只是在Google上搜索mock和php,我在对php类进行单元测试时遇到了同样的情况。有些函数可以在不使用任何其他资源的情况下进行测试(单元测试),但许多函数执行文件读/写操作或需要访问数据库(集成测试)。为了测试这些功能,我将单元测试与集成测试结合起来。在我的设置和拆卸测试类中,它可能会加载数据库模式或从类函数所需的本地测试数据/目录中获取测试数据