gpt4 book ai didi

使用 Mockery 进行 PHP 单元测试和模拟

转载 作者:可可西里 更新时间:2023-10-31 22:44:36 26 4
gpt4 key购买 nike

这可能是我对模拟的误解。我真的很感激关于为什么模拟一个不存在或存在的类是一件好事的解释?

示例场景:假设我们有一个类依赖于第二个类的输出,我们更改了输出格式或其他格式。这不会让我们的测试保持成功,尽管它们在第一类中已经过时了吗?

最佳答案

答案是肯定的!如果您尊重代码中的某些可测试性原则,则可以将一个方法与同一类中的其他方法隔离开来。这就是单元测试的目标。

看这个例子:

<?php

class User {

public function years()
{
return floor($this->months() / 12);
}

public function months()
{
// Database call or anything else, it's a black box !
}

}

class UserTest extends TestCase {

public function testYearsReturnTheNumberOfYears()
{
$user = \Mockery::mock('User[months]');
$user->shouldReceive('months')->andReturn(18);

assertEquals(1, $user->years());
}

}

即使 months 方法被破坏,测试也会通过。阅读 mockery documentation以获得更多解释。

模拟是单元测试的关键。如果没有这个工具,当您的代码中出现问题时,您的所有测试都会失败,并且您无法找到错误的根源。 PHP 不够灵活,无法模拟 Ruby 或 Javascript 中的所有内容,但通过良好的设计模式,您可以做得很好。

一个很好的例子是 Laravel,它可以模拟所有核心类。像那样,您可以模拟数据库调用或电子邮件发送中的错误。

关于使用 Mockery 进行 PHP 单元测试和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com