我正在尝试在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