作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对不起,我的问题很长。
如何在扩展 KernelTestCase 的服务测试中模拟 entityManager?
现在,解释和我的测试......
我正在使用 Symfony3.2。我的应用程序是标准的。我有一些 Controller ,我使用 WebTestCase 来测试它们。
一般来说,我的 Controller 验证参数,调用服务/管理器,处理一些变量并将它们推送到查看,我的测试在测试扩展中非常简单 WebTestCase .
/**
* Test New Game Action
*/
public function testFooAction(){
//We mock the Service
$fooService = $this
->getMockBuilder(GameService::class)
->disableOriginalConstructor()
->getMock();
$fooService->expects(self::once())
->method('barMethod')
->willReturn($result);
//We create the client
$client = static::createClient();
$container = $client->getContainer();
//I put my mock here
$container->set('app.game-service', $fooService);
//I launch the request
$client->request('GET', '/foo');
//I handle the response
$response = $client->getResponse();
//I do some tests like this one
self::assertEquals(200, $response->getStatusCode());
}
//We create the client
$client = static::createClient();
$container = $client->getContainer();
//I put my mock here
$container->set('app.game-service', $fooService);
/**
* FooService constructor.
* @param EntityManager $entityManager
*/
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
<?php
class FooServiceTest extends KernelTestCase
{
/**
* Foo Service.
*
* @var FooService
*/
private $fooService;
/**
* Prepares the environment before running each test.
*/
protected function setUp()
{
parent::setUp();
self::bootKernel();
$this->fooService = static::$kernel->getContainer()
->get('app.foo-service') //HERE IS HOW I HANDLE MY SERVICE TO TEST IT
;
}
commit
方法 .
protected function setUp()
{
parent::setUp();
$entityManager = $this
->getMockBuilder('Doctrine\ORM\EntityManager')
->disableOriginalConstructor()
->getMock();
$entityManager
->expects(once()) // I WANT EXACTLY ONE CALL TO COMMIT METHOD
->method('commit')
->willReturn(null);
self::bootKernel();
$container = static::$kernel->getContainer();
$container->set('doctrine.orm.entity_manager', $entityManager); // THIS LINE DOES NOTHING <=======
$this->gameService = static::$kernel->getContainer()
->get('app.game-service')
;
protected function setUp()
{
parent::setUp();
$entityManagerMock = $this
->getMockBuilder('Doctrine\ORM\EntityManager')
->disableOriginalConstructor()
->getMock();
$entityManagerMock
->expects(once()) // I WANT EXACTLY ONE CALL TO commit METHOD
->method('commit')
->willReturn(null);
self::bootKernel();
$this->gameService = static::$kernel->getContainer()
->get('app.game-service')
;
$this->gameService->entityManager = entityManagerMock;
最佳答案
首先在你的代码中
$container->set('doctrine.orm.entity_manager'); // THIS LINE DOES NOTHING <=======
composer update
和 EntityManager 的
commit
会有一些可选的
isReallyCommit
范围。你的代码会被破坏,但你不会注意到它,因为测试是绿色的。我知道这不太可能,但无论如何这只是示例。我认为这里的好习惯是
关于unit-testing - 如何使用 Symfony 在 serviceTest 中模拟 EntityManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950330/
对不起,我的问题很长。 如何在扩展 KernelTestCase 的服务测试中模拟 entityManager? 现在,解释和我的测试...... 我正在使用 Symfony3.2。我的应用程序是标准
在尝试使用 EclEMMA 生成代码覆盖率时。它启动了程序但引发了问题 - (请查看随附的图像 - 图 1)。在此输入图像描述为了重现这个问题,我尝试在一小段代码上运行它。我设计了一个简单的 JUNI
我是一名优秀的程序员,十分优秀!