我想知道如何对单元测试活动记录模式进行测试?我在这个项目中使用Yii 2,我明白通常我会想做模拟并使用依赖注入将这些模拟插入到我的测试类中 - 但是,我不知道如何使用它静态方法,因为我没有在任何地方实例化类?例如,在Yii的活动记录类中,我将执行以下操作从数据库中选择一行:
ExampleTable::find()->where(['id' => 10])->one();
我是如何模拟这个使用静态方法直接使用数据库的类的?
答案 0 :(得分:2)
在Yii2中存在codeception
,您可以使用库codeception/AspectMock
来模拟所有静态而不依赖注入:
https://github.com/Codeception/AspectMock
这是AspectMock官方手册中的示例:
允许对静态方法进行存根和模拟。
让我们重新定义静态方法并在运行时验证它们的调用。
<?php
function testTableName()
{
$this->assertEquals('users', UserModel::tableName());
$userModel = test::double('UserModel', ['tableName' => 'my_users']);
$this->assertEquals('my_users', UserModel::tableName());
$userModel->verifyInvoked('tableName');
}
我希望它会有所帮助。
答案 1 :(得分:0)
一些想法: