You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPUnit\Framework\TestCase与Tests\TestCase有什么区别?分别适用哪些场景?

我注意到示例测试中内置了以下两个测试类:
Feature Test => use Tests\TestCase;
Unit Test => PHPUnit\Framework\TestCase;
请问这两个类之间有什么区别?各自适合在哪些场景下使用?

两类测试基类的核心区别

Tests\TestCase 是 Laravel 对原生 PHPUnit 测试基类的扩展,本身就继承自 PHPUnit\Framework\TestCase,二者的核心差异如下:

  • 框架加载逻辑:Tests\TestCase 运行时会自动初始化 Laravel 应用容器,支持直接调用 app()、config() 等框架助手函数,也能正常使用 Eloquent、路由、队列、缓存等所有 Laravel 组件;PHPUnit\Framework\TestCase 是纯 PHPUnit 原生基类,不会加载 Laravel 框架,所有框架相关功能都无法直接调用。
  • 内置测试工具:Tests\TestCase 封装了大量 Laravel 专属的测试便捷方法,比如模拟接口请求的 get()/post()、数据库断言的 assertDatabaseHas()、用户身份模拟的 actingAs() 等,这些能力原生 PHPUnit 基类都不提供。
  • 运行速度:PHPUnit\Framework\TestCase 不需要加载框架,测试启动和运行速度更快;Tests\TestCase 每次执行都要初始化 Laravel 应用,运行速度相对更慢。
各自适用场景

优先用 PHPUnit\Framework\TestCase 的场景

  • 测试不依赖 Laravel 框架的纯业务逻辑,比如自定义工具类、纯数值计算逻辑、值对象、业务规则校验类等,只要测试对象可以直接实例化运行、不需要任何框架组件支持的都可以用。
  • 追求测试执行效率,需要快速验证小粒度逻辑正确性的场景。

必须用 Tests\TestCase 的场景

  • 功能测试:比如接口响应验证、页面路由测试、权限校验、表单提交逻辑等和框架能力强耦合的测试场景。
  • 测试依赖 Laravel 组件的代码:比如 Eloquent 模型方法、队列任务、事件监听器、服务提供者、自定义验证规则、中间件等,这类代码脱离 Laravel 环境无法正常运行,必须用扩展后的基类。
  • 集成测试:验证多模块、数据库、缓存等外部依赖协同工作的正确性的场景。

内容的提问来源于stack exchange,提问作者Maik Lowrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:39:06