Skip to content

Commit 650e2cb

Browse files
committed
MQE-1800: Allow generate:tests to continue running even if one test fails generation
1 parent 1e4a448 commit 650e2cb

25 files changed

+744
-327
lines changed

dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler;
1717
use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor;
1818
use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser;
19+
use Magento\FunctionalTestingFramework\Util\GenerationErrorHandler;
1920
use Magento\FunctionalTestingFramework\Util\Manifest\DefaultTestManifest;
2021
use tests\unit\Util\MagentoTestCase;
2122
use Magento\FunctionalTestingFramework\Util\Manifest\TestManifestFactory;
@@ -179,13 +180,15 @@ public function testInvalidSuiteTestPair()
179180
$suiteConfig = ['Suite2' => ['Test1']];
180181
$manifest = TestManifestFactory::makeManifest('default', $suiteConfig);
181182

182-
// Set up Expected Exception
183-
$this->expectException(\Exception::class);
184-
$this->expectExceptionMessageMatches('(Suite: "Suite2" Tests: "Test1")');
185-
186183
// parse and generate suite object with mocked data and manifest
187184
$mockSuiteGenerator = SuiteGenerator::getInstance();
188185
$mockSuiteGenerator->generateAllSuites($manifest);
186+
187+
// assert that no exception for generateAllSuites and suite generation error is stored in GenerationErrorHandler
188+
$errMessage = 'Cannot reference tests which are not declared as part of suite (Suite: "Suite2" Tests: "Test1")';
189+
TestLoggingUtil::getInstance()->validateMockLogStatement('error', $errMessage, []);
190+
$suiteErrors = GenerationErrorHandler::getInstance()->getErrorsByType('suite');
191+
$this->assertArrayHasKey('Suite2', $suiteErrors);
189192
}
190193

191194
public function testNonExistentSuiteTestPair()
@@ -203,13 +206,15 @@ public function testNonExistentSuiteTestPair()
203206
$suiteConfig = ['Suite3' => ['Test1']];
204207
$manifest = TestManifestFactory::makeManifest('default', $suiteConfig);
205208

206-
// Set up Expected Exception
207-
$this->expectException(\Exception::class);
208-
$this->expectExceptionMessageMatches('#Suite3 is not defined#');
209-
210209
// parse and generate suite object with mocked data and manifest
211210
$mockSuiteGenerator = SuiteGenerator::getInstance();
212211
$mockSuiteGenerator->generateAllSuites($manifest);
212+
213+
// assert that no exception for generateAllSuites and suite generation error is stored in GenerationErrorHandler
214+
$errMessage = 'Suite Suite3 is not defined in xml or is invalid.';
215+
TestLoggingUtil::getInstance()->validateMockLogStatement('error', $errMessage, []);
216+
$suiteErrors = GenerationErrorHandler::getInstance()->getErrorsByType('suite');
217+
$this->assertArrayHasKey('Suite3', $suiteErrors);
213218
}
214219

215220
/**
@@ -271,6 +276,14 @@ private function setMockTestAndSuiteParserOutput($testData, $suiteData)
271276
$property->setValue($instance, $instance);
272277
}
273278

279+
/**
280+
* clean up function runs after each test
281+
*/
282+
public function tearDown(): void
283+
{
284+
GenerationErrorHandler::getInstance()->reset();
285+
}
286+
274287
/**
275288
* clean up function runs after all tests
276289
*/

dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,16 @@
2020
use tests\unit\Util\ObjectHandlerUtil;
2121
use tests\unit\Util\TestDataArrayBuilder;
2222
use tests\unit\Util\MockModuleResolverBuilder;
23+
use tests\unit\Util\TestLoggingUtil;
24+
use Magento\FunctionalTestingFramework\Util\GenerationErrorHandler;
2325

2426
class TestObjectHandlerTest extends MagentoTestCase
2527
{
28+
public function setUp(): void
29+
{
30+
TestLoggingUtil::getInstance()->setMockLoggingUtil();
31+
}
32+
2633
/**
2734
* Basic test to validate array => test object conversion.
2835
*
@@ -254,10 +261,13 @@ public function testGetAllTestObjectsWithInvalidExtends()
254261
ObjectHandlerUtil::mockTestObjectHandlerWitData(array_merge($testOne, $testTwo));
255262

256263
$toh = TestObjectHandler::getInstance();
257-
258-
$this->expectException(\Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException::class);
259-
$this->expectExceptionMessage("Mftf Test can not extend from itself: " . "testOne");
260264
$toh->getAllObjects();
265+
266+
// assert that no exception for getAllObjects and test generation error is stored in GenerationErrorHandler
267+
$errorMessage = '/' . preg_quote("Mftf Test can not extend from itself: " . "testOne") . '/';
268+
TestLoggingUtil::getInstance()->validateMockLogStatmentRegex('error', $errorMessage, []);
269+
$testErrors = GenerationErrorHandler::getInstance()->getErrorsByType('test');
270+
$this->assertArrayHasKey('testOne', $testErrors);
261271
}
262272

263273
/**
@@ -360,6 +370,8 @@ public function testGetTestObjectWhenEnablePause()
360370
*/
361371
public function tearDown(): void
362372
{
373+
TestLoggingUtil::getInstance()->clearMockLoggingUtil();
363374
AspectMock::clean();
375+
parent::tearDownAfterClass();
364376
}
365377
}

dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/AnnotationExtractorTest.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Monolog\Logger;
1313
use PHPUnit\Framework\TestCase;
1414
use tests\unit\Util\TestLoggingUtil;
15+
use Magento\FunctionalTestingFramework\Util\GenerationErrorHandler;
1516

1617
class AnnotationExtractorTest extends TestCase
1718
{
@@ -195,14 +196,20 @@ public function testTestCaseIdUniqueness()
195196
$extractor = new AnnotationExtractor();
196197
$extractor->extractAnnotations($firstTestAnnotation, "firstTest");
197198
$extractor->extractAnnotations($secondTestannotation, "secondTest");
199+
$extractor->validateTestCaseIdTitleUniqueness();
198200

199-
//Expect Exception
200-
$this->expectException(\Magento\FunctionalTestingFramework\Exceptions\XmlException::class);
201-
$this->expectExceptionMessage("TestCaseId and Title pairs must be unique:\n\n" .
202-
"TestCaseId: 'MQE-0001' Title: 'TEST TITLE' in Tests 'firstTest', 'secondTest'");
201+
// assert that no exception for validateTestCaseIdTitleUniqueness
202+
// and validation error is stored in GenerationErrorHandler
203+
$errorMessage = '/' . preg_quote("TestCaseId and Title pairs is not unique in Tests 'firstTest', 'secondTest'") . '/';
204+
TestLoggingUtil::getInstance()->validateMockLogStatmentRegex('error', $errorMessage, []);
205+
$testErrors = GenerationErrorHandler::getInstance()->getErrorsByType('test');
206+
$this->assertArrayHasKey('firstTest', $testErrors);
207+
$this->assertArrayHasKey('secondTest', $testErrors);
208+
}
203209

204-
//Trigger Exception
205-
$extractor->validateTestCaseIdTitleUniqueness();
210+
public function tearDown(): void
211+
{
212+
GenerationErrorHandler::getInstance()->reset();
206213
}
207214

208215
/**

0 commit comments

Comments
 (0)