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

PHPUnit + Symfony - testowanie fabryki z zależnością w konstruktorze

Object Storage Arubacloud
0 głosów
395 wizyt
pytanie zadane 6 września 2020 w PHP przez XiverKi Bywalec (2,050 p.)
edycja 6 września 2020 przez XiverKi

Dzień dobry,

Stworzyłem fabryke, która tworzy encje użytkownika na podstawie danych, które przekazywane są w obiekcie typu DTO 

Nie do końca jestem przekonany co do poprawności kodu tego testu, chętnie przyjmę wskazówkic o można by było poprawić.


Kod testu:

public function testShouldCreateUserObjectFromUserDto()
    {
        //Given
        /**
         * @var UserDto $userDto
         */
        $userDto = $this->getMockBuilder(UserDto::class)->getMock();
        $userDto->email = 'admin@admin';
        $userDto->plainPassword = '12345';
        $userDto->roles = ["ROLE_USER"];

        $passwordEncoderMock = $this->getMockBuilder(
            \Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface::class
        )->getMock();

        $passwordEncoderMock->expects($this->any())
        ->method('encodePassword')
        ->willReturn('encodedPassword');

        //When
        $userFactory = new UserFactory($passwordEncoderMock);
        $user = $userFactory->create($userDto);

        //Then
        $this->assertInstanceOf(User::class, $user);
    }

 

2 odpowiedzi

0 głosów
odpowiedź 7 września 2020 przez Ehlert Ekspert (212,670 p.)
wybrane 9 września 2020 przez XiverKi
 
Najlepsza
  1. Tak jak napisał Assasz, warto tworzyć normalne dto podczas takiego testu. Polecam wzorzec ObjectMother. Tworzysz klasę ze statystycznymi metodami które będą budować takie dto z uzupełnionymi wartościami w zależności od kontekstu.
  2. Return hint załatwi sprawę.
  3. Do tworzenia Mocków świetnie nadaje się Mockery. Warto przetestować.
  4. Używaj use, aby nie korzystać z całych namespace'ow w kodzie.
  5. Przepisanie odpowiedni wartości z dto to rzecz trywialna, ale może warto zweryfikować czy user po utworzeniu ma poprawny status wink jeśli taki jest to zastanów się czy nie jest to istotne dla Twojego systemu.
+2 głosów
odpowiedź 7 września 2020 przez Assasz Nałogowiec (30,460 p.)

1. Nie musisz mockować takich obiektów jak DTO. Po prostu stwórz nowy obiekt i poustawiaj jego własności.

2. Prawdopodobnie nie musisz sprawdzać typu obiektu zwracanego przez Twoją fabrykę (metoda create powinna mieć ustawiony typ zwracany, aczkolwiek nie widzę kodu tej fabryki). Zamiast tego sprawdź, jakie wartości posiada obiekt stworzonego usera, np.:

$this->assertSame($user->getEmail(), $userDto->email);

3. expects($this->any()) jest zazwyczaj zbędnę. Używaj metody expects tylko wtedy, kiedy rzeczywiście spodziewasz się wywołania metody określoną liczbę razy (albo nigdy).

4. $this->getMockBuilder()->getMock() możesz skrócić do $this->createMock().

komentarz 7 września 2020 przez XiverKi Bywalec (2,050 p.)

Chciałem użyć $this->createMock().  ale przy próbie użycia otrzymuje informacji o tym, że nie istnieje

komentarz 7 września 2020 przez Assasz Nałogowiec (30,460 p.)
komentarz 7 września 2020 przez XiverKi Bywalec (2,050 p.)
Faktycznie istnieje i nawet działa... moje ide ostatnio dziwne rzeczy pokazuje

Podobne pytania

0 głosów
0 odpowiedzi 123 wizyt
pytanie zadane 15 stycznia 2020 w PHP przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
1 odpowiedź 146 wizyt
pytanie zadane 10 stycznia 2020 w PHP przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
1 odpowiedź 565 wizyt
pytanie zadane 9 stycznia 2020 w PHP przez michal_php Stary wyjadacz (13,700 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...