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
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
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
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.
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 : )
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
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('/');
}
(...)
}
}
W sumie jak robie przekierowanie to czy musze tez wywlowywac die()
? Czy nie moge po prostu zwrocic pusta wartosc return null
?
Metoda z die
? WTF?
@serek haha, no tak :) A jak inaczej to przetestujesz? :) Dajesz? ?)
poniatowski napisał(a):
@serek haha, no tak :) A jak inaczej to przetestujesz? :) Dajesz? ?)
Nie testuję. Wyp*** taką funkcję w diabły z kodu :P
To jak zrobić przekierowanie HTTP w swojej aplikacji Internetowej? :)
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".
YHY. Looknij tutaj: https://www.acunetix.com/blog/articles/safely-handling-redirects-die-exit-php/
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ć.