loadFixtures(); } public function tearDown() { $this->unloadFixtures(); } public function fetchFixture($name) { return $this->getFixture($name); } public function fixtures() { switch ($this->scenario) { case 0: return []; case 1: return [ 'fixture1' => Fixture1::className(), ]; case 2: return [ 'fixture2' => Fixture2::className(), ]; case 3: return [ 'fixture3' => Fixture3::className(), ]; case 4: return [ 'fixture1' => Fixture1::className(), 'fixture2' => Fixture2::className(), ]; case 5: return [ 'fixture2' => Fixture2::className(), 'fixture3' => Fixture3::className(), ]; case 6: return [ 'fixture1' => Fixture1::className(), 'fixture3' => Fixture3::className(), ]; case 7: default: return [ 'fixture1' => Fixture1::className(), 'fixture2' => Fixture2::className(), 'fixture3' => Fixture3::className(), ]; } } } class FixtureTest extends TestCase { public function testDependencies() { foreach ($this->getDependencyTests() as $scenario => $result) { $test = new MyTestCase(); $test->scenario = $scenario; $test->setUp(); foreach ($result as $name => $loaded) { $this->assertEquals($loaded, $test->fetchFixture($name) !== null, "Verifying scenario $scenario fixture $name"); } } } public function testLoadSequence() { foreach ($this->getLoadSequenceTests() as $scenario => $result) { $test = new MyTestCase(); $test->scenario = $scenario; MyTestCase::$load = ''; MyTestCase::$unload = ''; $test->setUp(); $this->assertEquals($result[0], MyTestCase::$load, "Verifying scenario $scenario load sequence"); $test->tearDown(); $this->assertEquals($result[1], MyTestCase::$unload, "Verifying scenario $scenario unload sequence"); } } protected function getDependencyTests() { return [ 0 => ['fixture1' => false, 'fixture2' => false, 'fixture3' => false], 1 => ['fixture1' => true, 'fixture2' => false, 'fixture3' => false], 2 => ['fixture1' => false, 'fixture2' => true, 'fixture3' => false], 3 => ['fixture1' => false, 'fixture2' => false, 'fixture3' => true], 4 => ['fixture1' => true, 'fixture2' => true, 'fixture3' => false], 5 => ['fixture1' => false, 'fixture2' => true, 'fixture3' => true], 6 => ['fixture1' => true, 'fixture2' => false, 'fixture3' => true], 7 => ['fixture1' => true, 'fixture2' => true, 'fixture3' => true], ]; } protected function getLoadSequenceTests() { return [ 0 => ['', ''], 1 => ['321', '123'], 2 => ['32', '23'], 3 => ['3', '3'], 4 => ['321', '123'], 5 => ['32', '23'], 6 => ['321', '123'], 7 => ['321', '123'], ]; } }