mockLogSaver(); } return $this->articleFetcherWith($logSaver); } /** @return array{ArticleFetcher, MockInterface} */ protected function createArticleFetcherWithMockedLogSaver(): array { $logSaver = $this->mockLogSaver(); return [$this->articleFetcherWith($logSaver), $logSaver]; } private function articleFetcherWith(LogSaver $logSaver): ArticleFetcher { $saveArticle = new SaveArticleAction($logSaver); return new ArticleFetcher( $logSaver, new FetchRssArticlesAction($logSaver, $saveArticle), new FetchWebsiteArticlesAction($logSaver, $saveArticle), ); } /** @return LogSaver&MockInterface */ private function mockLogSaver(): MockInterface { $logSaver = Mockery::mock(LogSaver::class); $logSaver->shouldReceive('info')->zeroOrMoreTimes(); $logSaver->shouldReceive('warning')->zeroOrMoreTimes(); $logSaver->shouldReceive('error')->zeroOrMoreTimes(); $logSaver->shouldReceive('debug')->zeroOrMoreTimes(); return $logSaver; } }