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é.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$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