createMock(Session::class); /** @var UserModelImplementation|MockObject $userRepository */ $userRepository = new UserModelImplementation(); /** @var User|MockObject $user */ $user = $this->createMock(User::class); $session->expects($this->exactly(3)) ->method('get') ->with('uid') ->willReturnOnConsecutiveCalls( null, 42, 1337 ); $auth = new Authenticator($session, $userRepository); // Not in session $this->assertEquals(null, $auth->user()); // Unknown user UserModelImplementation::$id = 42; $this->assertEquals(null, $auth->user()); // User found UserModelImplementation::$id = 1337; UserModelImplementation::$user = $user; $this->assertEquals($user, $auth->user()); // User cached UserModelImplementation::$id = null; UserModelImplementation::$user = null; $this->assertEquals($user, $auth->user()); } }