createPartialMock( InboxFactory::class, ['create'] ); $notification = $this->getMockBuilder(Inbox::class) ->addMethods(['setIsRead']) ->onlyMethods(['load', 'getId', 'save', 'setData', '__sleep', '__wakeup']) ->disableOriginalConstructor() ->getMock(); $notification->expects($this->once())->method('load')->with($notificationId)->willReturnSelf(); $notification->expects($this->once())->method('getId')->willReturn($notificationId); // when notification Id is valid, add additional expectations if ($notificationId) { $notification->expects($this->once())->method('save')->willReturnSelf(); $notification->expects($this->once())->method('setIsRead')->with(1)->willReturnSelf(); } $notificationFactory->expects($this->once())->method('create')->willReturn($notification); return new NotificationService($notificationFactory); } public function testMarkAsRead() { $notificationId = 1; $service = $this->_getServiceInstanceForMarkAsReadTest($notificationId); $service->markAsRead($notificationId); } public function testMarkAsReadThrowsExceptionWhenNotificationIdIsInvalid() { $this->expectException(LocalizedException::class); $this->expectExceptionMessage('Wrong notification ID specified.'); $notificationId = null; $service = $this->_getServiceInstanceForMarkAsReadTest($notificationId); $service->markAsRead($notificationId); } }