PHP 单元测试在 symfony 1.4 中嘲弄


PHP Unit testing with mockery in symfony 1.4

我正在尝试在symfony 1.4(实际上是1.5.3(https://github.com/LExpress/symfony1))中使用phpunit和嘲弄进行单元测试。有没有办法加载symfony的所有文件,然后,如果需要,从加载的类中创建模拟对象?错误消息是:"无法加载模拟{ClassName},类已经存在",这是不言自明的,但我想使用一些原始方法,而不仅仅是我模拟的方法。有没有办法做到这一点?

例如:

public funtion testTest() {
    $mock = Mockery::mock("alias:Site")->shouldReceive('getCurrent')->shouldReturn(3);
    $this->assertEquals(3, Project::test());
}
public static function test() {
    return Site::getCurrent();
}

如果我只包含 Project 类,它可以工作,但如果包含所有项目文件,我会收到错误消息。但是,如果 test() 函数使用 Site 对象的其他方法,我不想嘲笑呢?

如果你想使用一些用于通过 Mockery 生成模拟对象的类的原始方法,可以使用 makePartial 函数来帮助我们。这称为部分测试替身。

class Site {
    function getUrl() { return 'https://stackoverflow.com'; }
    function getCurrent() { return $this->getUrl(); }
}
$foo = mock(Testable::class)->makePartial();
$foo->getUrl(); // 'https://stackoverflow.com';
$foo->getCurrent(); // 'https://stackoverflow.com'
$foo->shouldReceive('getUrl')->andReturn('http://test.com');
$foo->getCurrent(); // 'http://test.com'

要了解有关部分测试双打的更多信息,请参阅官方文档链接 http://docs.mockery.io/en/latest/reference/creating_test_doubles.html#partial-test-doubles