我想知道如何对事件记录模式进行单元测试?我在这个项目中使用 Yii 2,我知道通常我想制作模拟并使用依赖注入(inject)将这些模拟插入到我的测试类中——但是,我不知道如何使用静态方法来做到这一点,因为我不是在任何地方实例化类吗?例如,在 Yii 的事件记录类中,我会执行以下操作以从数据库中选择一行:
ExampleTable::find()->where(['id' => 10])->one();
有什么想法可以模拟这个使用静态方法直接处理数据库的类吗?
最佳答案
在 Yii2 中存在 codeception
并且您可以使用库 codeception/AspectMock
来模拟所有静态而无需依赖注入(inject):
https://github.com/Codeception/AspectMock
这是官方 AspectMock 手册中的示例:
Allows stubbing and mocking of static methods.
Let's redefine static methods and verify their calls at runtime.
<?php
function testTableName()
{
$this->assertEquals('users', UserModel::tableName());
$userModel = test::double('UserModel', ['tableName' => 'my_users']);
$this->assertEquals('my_users', UserModel::tableName());
$userModel->verifyInvoked('tableName');
}
希望对您有所帮助。
关于php - 如何对事件记录模式静态方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31417163/