Jak przetestować model?

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

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

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.

0

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

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

$this->assertTrue(headers_sent());

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

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

0

Pseudo kod. Jak cos takiego przetestowac?

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('/');
        }

        (...)
    }
}
0

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

0

Metoda z die? WTF?

0

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

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

0

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

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1