我正在编写一个使用Doctrine DBAL系统的函数。这使用静态函数进行连接,如下所示:
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
我想用模拟器对这个功能进行单元测试。
public function openNewConnection(string $database_name): Connection
{
try {
// some logic where I check the validity of the connection
$this->connection = DriverManager::getConnection($connection_params, $config);
break;
} catch (Exception $e) {
// catch the different errors that could be created
}
return $this->connection;
}
我不能使用依赖注入作为这种方式:
$connectionParams
:我需要在此处拨打电话我一直在phpunit工作,而且我也看过嘲笑。我真的不明白我是如何做到这一点的:
这种嘲弄测试不起作用,但我不确定它应该如何:
public function testConnect(): void
{
// mocked connection return
$mocked_connection = new Connection([], $this->driver);
// use Mockery to simulate static call
$driver_manager = Mockery::mock('alias:\Doctrine\DBAL\DriverManager');
$driver_manager->shouldReceive('getConnection')
->once()
->andReturn($mocked_connection);
$database = new Database($this->database_configuration_file);
$database->openNewConnection('test_db_cluster_01');
$this->assertEquals($mocked_connection, $database->getConnection());
}
从我所看到的情况来看,$ database甚至不知道$ driver_manager,所以我不知道如何发生嘲弄。
这是我的问题:
答案 0 :(得分:1)