Nahradenie sluzby definovane v neone v kode

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
matopeto
Člen | 395
+
0
-

Zdravim

v testoch by som chcel nahratit sluzbu, za mock.

v configu mam definovane

services:
	imagesModel: FileImagesStorage

FileImageStorage implementuje rozhranie IImagesStorage

Teraz by som to chcel v kode nahradit za ImageStorageMock, ktory tiez implementuje IImageStorage

Pouzil som toto:

<?php
	$container->removeService("imagesModel");
	$container->addService("imagesModel", new ImageStorageMock());
?>

Bohuzial nette pise:

Nette\InvalidArgumentException: Service 'imagesModel' must be instance of FileImagesStorage, ImageStorageMock given.

Otazka je ako nahradit sluzbu za inu, ked implementuju rovnaky interface?

David Matějka
Moderator | 6445
+
+2
-

budes asi muset v configu pouzit zapis:

services:
	imageModel:
		class: IImageStorage
		create: FileImageStorage
matopeto
Člen | 395
+
0
-

Diki, funguje.

Šaman
Člen | 2661
+
0
-

Do testů vidím jen teoreticky, ale podle mě je špatná už myšlenka, že v kódu testu nahradím službu za mock.
Testy přece mají svoji vlastní konfiguraci, takže si tam navytváříš rovnou testovací služby. Nebo mi něco uniká?

matopeto
Člen | 395
+
0
-

Ano testy maju svoju konfiguraciu (s ostrou servisou), ale u specifickeho testu potrebujem otestovat na mock servise, ostatne testy na ostrej servise.