在 symfony 1.4 中使用嘲弄进行 PHP 单元测试

PHP Unit testing with mockery in symfony 1.4

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

例如:

1
2
3
4
5
6
7
8
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 函数可以帮助我们。这称为部分测试双打。

1
2
3
4
5
6
7
8
9
10
11
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'

要了解更多关于 Partial Test Doubles 的信息,请访问官方文档链接 http://docs.mockery.io/en/latest/reference/creating_test_doubles.html#partial-test-doubles