gpt4 book ai didi

php - 模拟单元测试 (PHP)

转载 作者:可可西里 更新时间:2023-10-31 22:46:43 24 4
gpt4 key购买 nike

我有一个类:

class Foo {
function getCurrentBar() {
$model = Query::findByPk($this->getSession()->get('current_bar')); // Pseudocode...

return $model;
}
}

所以在我的应用程序中基本上一次有一个柱,它作为一个整数存储在 session 中。我经常调用一个辅助函数来查找模型实例,它会进行数据库查询。也有缓存,但现在不重要了。

我的问题是:如何对它进行单元测试?我测试的一些类需要这个。我想我可以更改 session 以包含 ID,但这意味着我需要在数据库中有一个相应的模型。

最好的方法是添加方法 setCurrentBar() 仅用于单元测试目的吗?然后我可以模拟一个 bar 对象并设置它,它将用于所有单元测试。这有意义吗?

最佳答案

答案确实是依赖注入(inject),但你要控制的依赖是栏的,而不是栏本身。

class Foo {
private $query;

function __construct($query)
{
$this->query = $query;
}

function getCurrentBar() {
$model = $this->query->findByPk($this->getSession()->get('current_bar')); // Pseudocode...

return $model;
}
}

所以在你的生产代码中你有

$query = new Query() // assuming findByPk() is made a normal non-static method
$realFoo = new Foo($query);

但是对于单元测试...

$testFoo = new Foo(new MockQuery());

其中 MockQuery 是您的 Query 类的模拟版本,它返回模拟 bars

关于php - 模拟单元测试 (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8973033/

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