Bonjour à tous,
Je sollicite votre aide car j'essaie d'écrire des tests unitaires pour un de mes services sous Symfony 4, et pour l'instant je suis dans les choux.
Ma classe AlerteService utilise différentes dépendances dans son constructeur, dont TokenStorageInterface qui me permet de récupérer l'id de l'utilisateur connecté.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
//AlerteService
class AlerteService
{
private $router;
private $entityManager;
private $clientAdresseRepository;
private $clientContactRepository;
private $clientRepository;
private $user_id;
public function __construct
(
RouterInterface $router,
EntityManagerInterface $entityManager,
TokenStorageInterface $tokenStorage
)
{
$this->router = $router;
$this->entityManager = $entityManager;
$this->user_id = $tokenStorage->getToken()->getUser()->getId();
$this->clientAdresseRepository = $entityManager->getRepository(ClientAdresse::class);
$this->clientContactRepository = $entityManager->getRepository(ClientContact::class);
$this->clientRepository = $entityManager->getRepository(Client::class);
}
public function alert(string $titre, string $message)
{
$alerte = new Alerte();
$alerte->setTitre($titre);
$alerte->setMessage($message);
$alerte->setUserId($this->user_id);
$this->entityManager->persist($alerte);
$this->entityManager->flush();
return true;
} |
Et voici le test que je tente d'effectuer en vain :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
class AlerteServiceTest extends TestCase
{
public function testalert()
{
$arg1Mock = $this->createMock(RouterInterface::class);
$arg2Mock = $this->createMock(EntityManagerInterface::class);
$arg3Mock = $this->createMock(TokenStorage::class);
$alerteService = new AlerteService($arg1Mock, $arg2Mock, $arg3Mock);
$result = $alerteService->alert('salut', 'message');
$this->assertEquals(true, $result);
}
} |
Qui me renvoie le message d'erreur suivant :
App\Tests\Utils\AlerteServiceTest::testalert
Error: Call to a member function getUser() on null
Le problème reste le même si à la place j'écris :
$arg3Mock = $this->createMock(TokenStorageInterface::class);
Du coup je me demande si c'est mon test qui est incorrect, ou si c'est mon service et son constructeur qui pose problème 
La moindre piste serait la bienvenue ...
Merci d'avance
Partager