Piszę testy jednostkowe AccountControllera w springu, rozmyślam nad jedną metodą
akieś podpowiedzi jak zacząć, jak powinna być napisana . Za wszelkie podpowiedzi serdecznie dziękuję.
pomoźe ktoś? :)
Ech, tak sie kodu w ogóle nie powinno pisac.
- Model relacyjny nie powinien byc przesłany do kontrolera. Do kontrolera przesyłasz jakieś DTO
2.Logikę do tworzenia użytkownika powinnaś odseparować do jakiejś klasy Service. Tam ustawiasz haslo użytkownika
3.Proponuję testy pisać w Spocku a nie JUnicie
Piszę testy jednostkowe AccountControllera
Tu jest już twój błąd. Masz logikę w kontrolerze, a tej nie powinno tam być. Poza tym masz walidacje robioną na jana, zamiast za pomocą walidatora, jak człowiek. Do tego masz klasyczny błąd check-then-act i wcale ten twój if nie chroni cię przed tym że ktoś wyśle dwa razy request o założenie tego samego konta.
W ogóle mieszasz tam akcje związane z logiką aplikacji (dodanie czegoś do bazy) z obsługą kontrolera i zapytania. Rozbij to na osobne klasy. Potrzebny ci tu jest walidator plus serwis i nagle w kontrolerze nie będzie już nic do testowania, a tamte będzie testować łatwo bo nagle zrobią się proste.
Ten kod mógłby np. wyglądać jakoś tak:
@RestController
public class A{
@PostMapping(path = "/addAccount")
public ResponseEntity<String> addAccount(@Valid Account account) {
if(service.addAccount(account)){
return new ResponseEntity<String>("Saved",HttpStatus.OK);
}else{
return new ResponseEntity<String>("Account",HttpStatus.BAD_REQUEST);
}
}
}
I nagle nie bardzo jest co testować.
A zamiast tego lewego check-then-act mógłbyś mieć to załatwione w jednym query w transakcji, ale składnia zależy tu trochę od samej bazy.