Skip to content

Commit 0cb522b

Browse files
MAGETWO-84822: Mock ObjectManager for each test to keep from failing when run individually but not as part of suite
1 parent bfd3bf6 commit 0cb522b

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

dev/tests/unit/phpunit.xml.dist

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
</exclude>
3939
</whitelist>
4040
</filter>
41+
<listeners>
42+
<listener class="Magento\Framework\TestFramework\Unit\Listener\ReplaceObjectManager"/>
43+
</listeners>
4144
<logging>
4245
<!--coverage_html_placeholder
4346
<log type="coverage-html" target="{{coverage_dir}}/test-reports/coverage" charset="UTF-8" yui="true" highlight="true"/>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\TestFramework\Unit\Listener;
7+
8+
use Magento\Framework\App\ObjectManager;
9+
use Magento\Framework\ObjectManagerInterface;
10+
11+
/**
12+
* The event listener which instantiates ObjectManager before test run
13+
*/
14+
class ReplaceObjectManager extends \PHPUnit_Framework_BaseTestListener
15+
{
16+
/**
17+
* Replaces ObjectManager before run for each test
18+
*
19+
* Replace existing instance of the Application's ObjectManager with the mock.
20+
*
21+
* This avoids the issue with a not initialized ObjectManager
22+
* and makes working with ObjectManager predictable as it always contains clear mock for each test
23+
*
24+
* @param \PHPUnit_Framework_Test $test
25+
* @return void
26+
*/
27+
public function startTest(\PHPUnit_Framework_Test $test)
28+
{
29+
if ($test instanceof \PHPUnit_Framework_TestCase) {
30+
$objectManagerMock = $test->getMockBuilder(ObjectManagerInterface::class)
31+
->getMockForAbstractClass();
32+
$createMockCallback = function ($type) use ($test) {
33+
return $test->getMockBuilder($type)
34+
->disableOriginalConstructor()
35+
->getMockForAbstractClass();
36+
};
37+
$objectManagerMock->method('create')->willReturnCallback($createMockCallback);
38+
$objectManagerMock->method('get')->willReturnCallback($createMockCallback);
39+
ObjectManager::setInstance($objectManagerMock);
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)