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