<?php use DependencyInjector\DI; use PHPUnit\Framework\TestCase; require_once __DIR__ . '/legacyCode.php'; class MySingletonTest extends TestCase { /** * Test the default behaviour of your code. */ public function testGetAnObject() { // act $result = getTheSingletonResult(); //assert self::assertSame('defaultResult', $result); } /** * Test to mock your singleton. */ public function testGetAMockObject() { // prepare the mock $mock = Mockery::mock(MySingleton::class); $mock->shouldIgnoreMissing(); $mock->shouldReceive('getInstance')->andReturnSelf(); DI::set(MySingleton::class, $mock); // assign $mock->shouldReceive('getResult')->once()->andReturn('differentResult'); // act $result = getTheSingletonResult(); // assert self::assertSame('differentResult', $result); } public function testGetResultFromMock() { // assign $mock = Mockery::mock(MySingleton::class); $mock->shouldReceive('getResult')->once()->andReturn('anotherResult'); DI::set('mySingleton', $mock); // act $singletonUser = new SingletonUser(); $result = $singletonUser->getResult(); // assert self::assertSame('anotherResult', $result); } }