• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podczas testowania serwisu id użytkownika to null Symfony

Object Storage Arubacloud
0 głosów
97 wizyt
pytanie zadane 25 stycznia 2019 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)

Witam

Robię serwis odpowiedzialny za rejestrowanie użytkownika ale mam problem z testowaniem serwisu, gdy próbuje testować serwis to id użytkownika to null, domyślam się że nie może go dodać do bazy ale nie wiem gdzie leży błąd, gdy robię taką samą klasę w serwisie i wykonuje go to wszystko działa i użytkownik dodaje się do bazy, id w assert jest ustawione celowo.

 

<?php
 
namespace App\Tests\Services;
 
use App\Entity\User;
use App\Services\SecurityService;
use Doctrine\ORM\EntityManagerInterface;
use PHPUnit\Framework\TestCase;
 
class SecurityServiceTest extends TestCase
{
    /**
     * @var SecurityService
     */
    private $securityService;
 
    /**
     * @var EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
     */
    private $entityManagerInterfaceMock;
 
    protected function setUp()
    {
        $this->entityManagerInterfaceMock = $this->getMockBuilder(EntityManagerInterface::class)
            ->disableOriginalConstructor()
            ->getMock();
 
        $this->securityService = new SecurityService(
            $this->entityManagerInterfaceMock
        );
    }
 
    protected function tearDown()
    {
        $this->securityService = null;
        $this->entityManagerInterfaceMock = null;
    }
 
    public function testRegister()
    {
        $user = new User();
        $user->setUsername("ExampleUsername");
        $user->setPassword("ExamplePassword");
        $user->setEmail("ExampleEmail@example.com");
        $user->setCreatedAt(new \DateTime());
 
        $this->entityManagerInterfaceMock
            ->expects($this->once())
            ->method('persist')
            ->with($user);
        $this->entityManagerInterfaceMock
            ->expects($this->once())
            ->method('flush');
 
        $this->assertEquals($user->getId(), 5);
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 25 stycznia 2019 przez Ehlert Ekspert (212,670 p.)
Robisz mocka ema, który nie działa tak jak normalny em. Nie wiem czego za bardzo oczekujesz po tym teście. Że po zapisaniu usera będzie jego id? Testujesz (nieudolnie) framework, czego nie powinno się robić ogólnie.
komentarz 25 stycznia 2019 przez `Krzychuu Stary wyjadacz (13,940 p.)
Ogólnie to potem chciałem zrobić logikę w serwisie i wtedy sprawdzałbym w teście czy id nowego użytkownika z testu będzie takie samo jak w normalnym serwisie, coś na tej zasadzie, chyba że złe kombinuje :/, a jakbym mógł naprawić działanie em?
1
komentarz 26 stycznia 2019 przez Ehlert Ekspert (212,670 p.)
Masz testować kod, który Ty napisałeś. Testy dla frameworka masz napisane i można je odpalić. Jeśli rejestracja jest za pośrednictwem frameworka (Symfony, larva), albo bundla (fosuserbundle) to nie widzę sensu tego testować (jeśli wersja z commita którą posiadasz przechodziła testy). Opcjonalnie możesz mieć pewność poprzez napisanie testów funkcjonalnych, albo jednostkowych np. dla Guard w Symfony.
komentarz 26 stycznia 2019 przez `Krzychuu Stary wyjadacz (13,940 p.)
Dziekuje teraz widzę swój błąd, z tej strony na tą sprawę nie popatrzyłem, czyli dla tego em nie działał poprawnie czy jest inna przyczyna ?

Podobne pytania

0 głosów
1 odpowiedź 97 wizyt
pytanie zadane 22 lutego 2020 w PHP przez XiverKi Bywalec (2,050 p.)
0 głosów
0 odpowiedzi 475 wizyt
pytanie zadane 15 listopada 2019 w PHP przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
1 odpowiedź 315 wizyt
pytanie zadane 9 lipca 2019 w PHP przez mi-20 Stary wyjadacz (13,190 p.)

92,565 zapytań

141,417 odpowiedzi

319,602 komentarzy

61,950 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...