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\TestCaseTests\TestCase 的父级,因此 PHPUnit 的所有标准功能也都可用。

你可以同时使用!我尽可能使用 PHPUnit 的 TestCase 进行单元测试,使用 Laravel 的进行集成和功能测试。

【讨论】:

感谢您提供的小而好的概述。

以上是关于PHPUnit\Framework\TestCase 和 Tests\TestCase 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章