mocking - PHPUnit 9.5.2 中的方法模拟
问题描述
我是在 PHP 中模拟的新手,我似乎误解了一些东西,因为我无法让基础工作:
class Klass
{
public function a(): string
{
return 'a';
}
}
class MockTest extends \PHPUnit\Framework\TestCase
{
function testA(): void
{
$klass = new Klass();
$this->assertEquals('a', $klass->a());
}
function testMockA()
{
$mock = $this->getMockBuilder(Klass::class)->getMock();
$mock->method('a')->willReturn('foo');
$klass = new Klass();
$this->assertSame('foo', $klass->a());
}
}
测试 testMockA 失败,因为 $klass->a() 仍然返回 'a'。模拟似乎什么都不做?
我基于使用 Database Connection 的 PHPUnit Mocking 函数,我在其中使用了 TaskTest.php 上的内容:这就是我最终想要的,以模拟我的 Database 类以不进行实际查询,但我无法让它工作.
解决方案
你需要打电话$mock->a()
而不是$klass->a()
。事实上,你甚至不应该创建$klass
.
推荐阅读
- python - 循环描述数据库表的内容
- php - REQUEST_URI 前导正斜杠缺失
- java - 如何更改maven依赖项中的源代码?
- reactjs - React App 未连接到本地服务器
- hdfs - NameNode 是 HDFS 吞吐量的瓶颈吗?
- python-3.x - 如何使用 key.deserializer 和 value.deserializer 在 Python Confluent_Kafka 中解密自定义加密消息?
- python - Python - 一种使用许多产生变量的优雅方式
- kotlin - 区分 Kotlin 反射中的重载方法
- php - 在 WooCommerce 4.3.x 中禁用(删除)营销菜单选项
- java - 保存在日历上单击的日期。共享偏好