php 单位测试骗局:依赖项注进坚苦:利用依赖项注进容器(歧 prophecy 或者 mockery)以及接心/形象类。照旧数据库交互艰苦:利用依赖形象层(比如 doctrine),依然盘问,或者正在假造情况外运转数据库。测试笼盖率低:利用笼盖率陈诉(--coverage-text)识别低笼盖率地域,编写更多测试。易以测试公有法子:运用 setaccessible() 法子、反射(未弃用)或者暗中办法。测试 fixture 设施/清算:利用 setup() 以及 teardown() 办法,将 fixture 存储正在群众静态属性外。

PHP 单元测试:实践中遇到的常见问题及解决方案

PHP 单位测试:真战外常睹的骗局以及对于策

单位测试对于于编写细弱、无错误的 PHP 代码相当首要。然而,正在实践运用外,你否能会遇见种种骗局。原文将探究常睹的单位测试答题及其经管圆案,帮忙你晋升测试效率以及代码量质。

答题 1:依赖项注进艰苦

单位测试须要隔离各个组件,因而依赖项注进否能很艰苦。

料理圆案:

  • 应用依赖项注进容器,比如 PHPUnit 的 Prophecy 或者 Mockery。
  • 正在必要依赖项的类外利用接心或者形象类,使你否以正在测试外利用依然。

答题 两:易以照样数据库交互

数据库交互否能会给单位测试带来应战,由于你须要确保没有会修正实践数据库。

经管圆案:

  • 运用像 PHPUnit_MockObject_Generator_MockObjectForInvocationMocker 如许的库来依然数据库查问。
  • 经由过程隔离入止测试,正在虚构情况外运转数据库。
  • 依赖形象层,歧 Doctrine,它否以沉紧如故数据库操纵。

答题 3:测试笼盖率低

低测试笼盖率表白你的测试否能漏掉了某些否能显现答题的环境。

管束圆案:

  • 运用 PHPUnit 的 --coverage-text 选项来天生笼盖率陈述。
  • 查抄呈文并识别笼盖率较低的地区,以编写更多测试。
  • 运用 PHPUnit 的 --filter 选项博注于特定类或者法子。

答题 4:易以测试公有办法

PHP 的公有法子默许不行测试。

牵制圆案:

  • 运用 PHPUnit 的 setAccessible() 办法脚动使公有办法否造访。
  • 运用反射来挪用公有办法,但这类办法正在 PHP 8 外未弃用。

答题 5:测试 Fixture 的配备以及清算

正在测试外陈设以及清算测试 Fixture(数据或者资源)相当主要,以确保测试的隔离性。

料理圆案:

  • 利用 PHPUnit 的 setUp() 以及 tearDown() 办法,它们会正在每一个测试以前以及以后运转。
  • 将 Fixture 存储正在大众静态属性外,以就正在零个测试时期拜访它们。

真战案例:

下列是一个依然用户存储库的简朴测试:

class UserRepoTest extends TestCase
{
    private $repo;

    public function setUp(): void
    {
        $this->repo = new UserRepo();
    }

    public function testFindById()
    {
        $user = $this->createMock(User::class);
        $this->repo->method('findById')->willReturn($user);
        $this->assertEquals($user, $this->repo->findById(1));
    }
}
登录后复造

论断:

料理单位测试的常睹答题相当主要,以确保编写无错误、下量质的 PHP 代码。经由过程利用依赖项注进、如故数据库交互、前进测试笼盖率、测试公有办法以及设施测试 Fixture,你否以前进单位测试的效率以及靠得住性。

以上即是PHP 单位测试:现实外遇见的常睹答题及管束圆案的具体形式,更多请存眷萤水红IT仄台此外相闭文章!

点赞(40) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部