Jak przetestować model?

Jak przetestować model?
poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Witam,

Napisałem model, który pobierda dane z bazy danych. Jak moge przetestować takie metody? Na pewno potrzebuje jakas baze testowa? Jakies pomysl jak stworzyc i gdzie trzymac taka baze danych?

Pozdrawiam

no_solution_found
  • Rejestracja: dni
  • Ostatnio: dni
1

piszesz w symfony?

Ogólnie to jestem niewielkim fantem testowa w ten sposób. Przy dobrej segregacji warstw aplikacji nie musisz tego robić zbyt dużo. Krótko mówiąc: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

A wracając bardziej do Twojego pytania - to proponowałbym skupić się na większych kawałkach kodu a niżeli na pojedynczej klasie/modelu. Czyli testuj np proces składania zamówienia a nie klasę/model/kontroler oddzielnie. Dzięki temu masz mniej testów, które pokrywają większy kawałek kodu. W symfony jest fajny nawet przykład: https://symfony.com/doc/current/testing.html#your-first-functional-test

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
1
no_solution_found napisał(a):

A wracając bardziej do Twojego pytania - to proponowałbym skupić się na większych kawałkach kodu a niżeli na pojedynczej klasie/modelu. Czyli testuj np proces składania zamówienia a nie klasę/model/kontroler oddzielnie. Dzięki temu masz mniej testów, które pokrywają większy kawałek kodu. W symfony jest fajny nawet przykład: https://symfony.com/doc/current/testing.html#your-first-functional-test

Tak, zazwyczaj testy funkcjonalne > testy jednostkowe, które i tak często nie wyłapują runtime errorów wynikających z błędów bardziej ogólnych, lub niespodziewanych.

poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Fakt, zgadzam sie z przedmowcami. Zmienie swoje podejscie do testow jednostkowych.

Jedno pytanie do unit testing. Jak moge przetestowac/sprawidzc przekirowanie? header('Location: /') ?

Kopiuj
$this->assertTrue(headers_sent());

Ah, i zaraz po redirect() jest die(). Ladnie....
A moze uzyc cURL?? Zaraz posprawadzam : )

poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Do tego mam inny problem. Jak dodalem nowa metode ktora trzyma die() i nic nie zwraca void to jak mam to teraz mockowac? :D Nie chce usuwac void. OMG

poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Pseudo kod. Jak cos takiego przetestowac?

Kopiuj
class Request 
{
    public function redirectWithDie(string $url): void
    {
        $this->redirect($url);
        $this->terminate();
    }

    public function terminate(): void
    {
        die();
    }
}

class DoSomething
{
    public function view()
    {
        $notAdmin = false;
        
        if(!$notAdmin) {
            $request->redirectWithDie('/');
        }

        (...)
    }
}
poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

W sumie jak robie przekierowanie to czy musze tez wywlowywac die()? Czy nie moge po prostu zwrocic pusta wartosc return null?

serek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1506
0

Metoda z die? WTF?

poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

@serek haha, no tak :) A jak inaczej to przetestujesz? :) Dajesz? ?)

serek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1506
0
poniatowski napisał(a):

@serek haha, no tak :) A jak inaczej to przetestujesz? :) Dajesz? ?)

Nie testuję. Wyp*** taką funkcję w diabły z kodu :P

poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

To jak zrobić przekierowanie HTTP w swojej aplikacji Internetowej? :)

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
0

Robisz przekierowanie, a test polega na sprawdzeniu po prostu nagłówków jakie zostały wysłane:

https://www.php.net/manual/en/function.headers-list.php

..tyle tylko, że po wysłaniu nagłówków nie robisz die / exit, bo wtedy wiadomo, test "zdechnie".

poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
0

Po prostu po redirekcie nie wysyłasz już niczego do przeglądarki, jeżeli nie masz pewności to wiadomo, że trzeba zrobić die, ale wtedy nie przetestujesz tak jak chcesz przetestować.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.