Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP7.2中使用Mocky进行单元测试,以及模拟有说服力的查询_Php_Unit Testing_Laravel 5.5_Mockery - Fatal编程技术网

如何在PHP7.2中使用Mocky进行单元测试,以及模拟有说服力的查询

如何在PHP7.2中使用Mocky进行单元测试,以及模拟有说服力的查询,php,unit-testing,laravel-5.5,mockery,Php,Unit Testing,Laravel 5.5,Mockery,我想为现有的生产系统创建一组单元测试,这些测试将在本地执行,由预提交挂钩触发 根据要求,测试最多必须运行3-4秒 根据定义,单元测试应该单独调用方法。但是,系统严重依赖于数据库,因此我希望能够模拟数据库调用 该应用程序正在运行PHP7.2、Laravel 5.5.4 我一直试图使用嘲弄,但没有成功。下面是一个简单的例子,说明我一直在尝试做的事情: public function testExample() { // Create a new user $newUser = new

我想为现有的生产系统创建一组单元测试,这些测试将在本地执行,由预提交挂钩触发

根据要求,测试最多必须运行3-4秒

根据定义,单元测试应该单独调用方法。但是,系统严重依赖于数据库,因此我希望能够模拟数据库调用

该应用程序正在运行PHP7.2、Laravel 5.5.4

我一直试图使用嘲弄,但没有成功。下面是一个简单的例子,说明我一直在尝试做的事情:

public function testExample()
{
    // Create a new user
    $newUser = new User();
    $newUser->id = 1;

    // Mock the User
    $mockedUser = Mockery::mock(User::class);
    // Mock the Builder
    $mockedBuilder = Mockery::mock(Builder::class);
    $this->app->instance(Builder::class, $mockedBuilder);
    $this->app->instance(User::class, $mockedUser);
    // Set the expectations
    $mockedBuilder->shouldReceive('first')->once()->andReturn($newUser);
    $mockedUser->shouldReceive('where')
        ->with('id', 5)
        ->once()
        ->andReturn($mockedBuilder);

    $this->assertEquals($newUser->id, User::where('id', 5)->first()->id);
}
然而,因为“where”实际上是对Builder的静态调用,所以它不起作用。
有什么办法可以实现吗?我曾想过嘲笑DB facade(或PDO),但它似乎太。。粗糙的。有更好的主意吗?

你在嘲笑哪个构建器类?where不应该是对Builder的静态调用,因为它使用的是Laravel的facades。我尝试使用
illighte\Database\Query\Builder
illighte\Database\elogent\Builder
,两者都不起作用。这是xdebug非常有用的地方,可以查看调用的最终结果。如果不尝试,很难告诉您mysel.fXdebug显示我正在输入'illumb\Database\elogent\Builder'的'where'方法。