PHPUnit\Framework\TestCase 和 Tests\TestCase 有啥区别?
Posted
技术标签:
【中文标题】PHPUnit\\Framework\\TestCase 和 Tests\\TestCase 有啥区别?【英文标题】:What is the difference between PHPUnit\Framework\TestCase and Tests\TestCase?PHPUnit\Framework\TestCase 和 Tests\TestCase 有什么区别? 【发布时间】:2021-12-02 00:59:51 【问题描述】:我注意到在示例测试中,两个类是内置的。
功能测试 => use Tests\TestCase;
单元测试 => phpUnit\Framework\TestCase;
两者有什么区别?您在哪些情况下使用其中一种?
【问题讨论】:
这能回答你的问题吗? What's the difference between unit, functional, acceptance, and integration tests? 另见sqa.stackexchange.com/questions/23392/… 可能比命名分类更重要的是它们的实际不同之处。Tests\TestCase
引导 Laravel 应用程序,就像它在您实际使用应用程序时所做的那样。这意味着您可以将服务容器用于 DI、发出 HTTP 请求或任何其他依赖于 Laravel 本身的事情。 PHPUnit 测试用例只提供测试助手,与 Laravel 无关。
@BrianThompson 谢谢!这已经帮助了我。所以我也可以混合两者?
我不是 100% 你所说的混合两者的意思,但 Laravel 测试用例最终会扩展 PHPUnit 之一。
好的。我明白。谢谢!
【参考方案1】:
PHPUnit\Framework\TestCase
这是 PHPUnit 测试的标准开箱即用父级。它只有 PHPUnit 提供的功能。
当你想要“真正的”单元测试时最好使用它,而这些单元测试没有 Laravel 的知识或脚手架。它们也快得多。
Tests\TestCase
这是多种测试(可以是单元、集成或功能)的父类,这些测试依赖于 Laravel 应用程序才能运行。这些场景可能包括:
使用 Eloquent 工厂创建模型 使用 Facades 及其假货 使用全局帮助器的单元测试组件(例如config()
)
为每个测试使用数据库事务和/或重置
使用 Laravel 提供的任何其他增强功能和断言
PHPUnit\Framework\TestCase
是 Tests\TestCase
的父级,因此 PHPUnit 的所有标准功能也都可用。
你可以同时使用!我尽可能使用 PHPUnit 的 TestCase 进行单元测试,使用 Laravel 的进行集成和功能测试。
【讨论】:
感谢您提供的小而好的概述。以上是关于PHPUnit\Framework\TestCase 和 Tests\TestCase 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章