Testy aplikacji w Spring Boot

0

Hej

Najwyższy czas zabrać się za testy. Nigdy tego nie robiłem chociaż już od jakiegoś czasu programuje... Więc mam klasę :

public class Product {
@Min(20)
@Max(50)
private int cena;

@Size(min = 3, max = 40)
private String nazwa;

@Max(100)
private String kategoria;

//gettery, settery etc.

I teraz chciałem napisać test czy działa mi validacja.

 @Test
	    public void shouldNotValidateWhenPriceOver50() {
		Product p = new Product();
		p.setCena(1000);

		Set<ConstraintViolation<Product>> violations = validator.validate(p);
	        assertFalse(violations.isEmpty());
	        
	 }

I wszystko ładnie test przeszedł, ale to nie ma sensu, bo validacja zadziałała dla całego obiektu, a nie dla jednego pola. I tutaj moje pytanie.

  1. Jak pisać takie testy? Czy powinienem w takim teście uwzględnić pola **nazwa **oraz kategoria?
  2. Czy jest opcja testowania tylko jednego pola?
  3. Czy lepiej pisać testy, na "assertTrue" czy "assertFalse" (sorki nie wiem jak to inaczej wytłumaczyć)
  4. Ogólne porady dotyczące testowania.

Z góry dzięki

0

To produkt to jest DTO, które walidujesz jako parametr metody kontrolera Spring MVC?

Testowałem bean validation jednostkowo. Prosta sprawa.

  1. Tworzysz test na przypadek, gdzie wszystko działa.
  2. Potem modyfikujesz go tak, aby wystąpiło co najmniej 1 ConstraintViolationException na każde użycie bean validation na polu.

Napisałbym następujące testy:

  1. shouldPassValidationForCorrectProduct
  2. shouldDetectInvalidPriceBelowMinimum
  3. shouldDetectInvalidPriceAboveMaximum
  4. shouldDetectCategoryAboveMaximum

W pierwszym teście masz 0 constraint violations w Set, w pozostałych chcesz mieć dokładnie 1. I to wszystko. Testy jednostkowe.

Poczytaj se też jak używać Bean Validation dla dowolnych Spring Beans nie tylko w Spring MVC: to działa dla każdego Spring Bean. Adnotacje @Validated i @Valid.

0

Z porad mam taką żeby pisac testy w Groovym i Spocku a nie JUnicie :P
2 jest taka żeby nazwy metod mówiły o tescie
np. "there should be validator error for too short password"

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