Symfony/PHPUnit 模拟服务
本教程将介绍Symfony/PHPUnit 模拟服务的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。
问题描述
我正在使用 PHPUnit 为 Symfony 编写功能测试,但我的模拟不起作用.不过,我可能误解了它们的工作原理.
在我的单元测试的 setUp()
方法中,我有以下代码:
...
// Create a stub
$stub = $this->getMockBuilder('ApiBundleUtilWordPressBridge')
->disableOriginalConstructor()
->getMock();
// Configure the stub.
$user = new WordPressUser();
$user->setUsername('dummy');
$stub->expects($this->any())
->method('checkCredentials')
->will($this->returnValue(true));
$stub->expects($this->any())
->method('getUser')
->will($this->returnValue($user));
...
在我的 Symfony 应用程序中,我定义了一个服务:
services:
api.wp_bridge:
class: ApiBundleUtilWordPressBridge
arguments: [@service_container]
据我了解,mock 应该替换真正的 WordPressBridge
,但事实并非如此.我原来的还在用.我错过了什么吗?
推荐答案
据我了解,mock 应该替换真正的 WordPressBridge,但事实并非如此.我原来的还在用.我错过了什么吗?
基本上你必须在 Symfony 容器中以某种方式替换你的服务.
如果您进行功能测试",那么您可能应该为 "test" 环境创建测试虚拟"服务,该服务将覆盖原始服务.你可以这样做:
在 src/YourBundle/Resources/config/services.yml
services:
api.wp_bridge:
class: %api.wp_bridge.class%
arguments: [@service_container]
在 app/config/config.yml
parameters:
api.wp_bridge.class: "ApiBundleUtilWordPressBridge"
在 app/config/config_test.yml
parameters:
api.wp_bridge.class: "ApiBundleUtilTestWordPressBridge"
然后功能测试将使用 "ApiBundleUtilTestWordPressBridge" - 因为它是在 "test" 环境中执行的.
您可以尝试模拟容器并将其传递给测试内核,但是如果没有其他一些模拟库(在纯 PHPUnit 中),这可能会很痛苦.
我个人使用 phpspec2 进行单元"测试,其中模拟很容易 🙂 和一些接受标准"" 我正在使用的东西 behat 和 貂
好了关于Symfony/PHPUnit 模拟服务的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。