Pisac testy żeby testowac np wyrażenia regularne, czy tak sie nie robi?

0

Mam model w ktorym mam kilka wyrazen regularnych do sprawdzenia danych wprowadzanych przez uzytkownika. Nie wiem czy te regexy sa na pewnoe dobre dla kazdego przypadku i dlatego chcialem je sobie testowac. Czy to dobry pomysl zeby w testach do calego projektu umiuescic tez sprawdzenie czy napisane wyrazenie regularne zwraca poprawny wynik?

1

Jeśli są istotne z punkty widzenia działania systemu - testowałabym.

0

Nie wiem czy te regexy sa na pewnoe dobre dla kazdego przypadku

I się nie dowiesz XD Regexy ciężko ogarnąć i zawsze jakiegoś przypadku nie przewidzisz i będą bugi (zwykle są, jak się robi coś na Regexpach).

Ale to właśnie argument na tym, żeby to sprawdzać, czyli np. jak robisz walidację e-maila, żeby wpisać poprawne i niepoprawne maile*, i sprawdzać czy system zareaguje / odrzuci.

Z drugiej strony nie jestem pewien, czy to powinno być testowane na poziomie wyrażeń regularnych (wyrażenia regularne to w pewnym sensie szczegół implementacyjny), czy nie lepiej np. bardziej testować samo działanie systemu/części systemu(np. walidacji), a to, czy będzie to robione za pomocą regexpów czy inną metodą, zostawić już nieokreślone.

Bo co jeśli system się rozrasta i np. załóżmy, że robisz prostą wyszukiwarkę na stronę. Początkowo parsujesz zapytania do wyszukiwarki za pomocą regexpów, a potem się okazuje, że regexpy nie wystarczą do bardziej zaawansowanych zapytań i w końcu piszesz własny mini-parser. Albo odwrotnie - okazuje się, że nawet regexpy to overkill i robisz jakiegoś zwykłego splita na stringu.

Ew. robisz coś jeszcze innego i zamiast 1 regexpa, robisz to na 2-3 regexpach, które po kolei parsujesz i wyłuskujesz z nich po kolei dane (bo akurat tak ci wygodnie). Albo po prostu regexp jest tylko częścią operacji, bo po użyciu regexpu jeszcze wykonujesz jakieś dodatkowe operacje na tych danych, więc wtedy i tak samo przetestowanie regexpa nie wiele ci da.

tak więc jak dla mnie testowanie regexpów jako regexpów trochę jest śliskie. Moim zdaniem lepiej testować zachowanie systemu/poszczególnych jego części, a nie takie szczegóły jak regexpy.

*chociaż czytałem ostatnio, że reguły walidacji poprawności adresów e-mail są zupełnie inne, niż większość ludzi myśli. https://haacked.com/archive/2[...]n-email-address-until-i.aspx/

0

Nie samo wyrażenie tylko klasę walidatora, w której tego wyrażenia używasz.

0
[somekind napisał(a)]:

Nie samo wyrażenie tylko klasę walidatora, w której tego wyrażenia używasz.

Mam te wyrażenia w modelach. Np w modelu User mam między innymi wyrażenie testujące poprawność wprowadzonego maila itp.

0

To chyba masz coś nie tak.

0

@somekind:

mam mniej więcej coś takiego:

public class User
{
 private readonly Regex UserNameRegex = new Regex(pattern);
...

 public void UserName(string username)
 {
  if(!UserNameRegex(username)
    throw new UserException(exceptionType, "Invalid user name");

...
  }

}
0

A skąd bierzesz wartość username? Z jakiegoś pola tekstowego w GUI?

0

Tak, użytkownik będzie wpisywał do pola tekstowego.

0

I tak każdą wartość oddzielnie będziesz przesyłał jako string i sprawdzał w ten sposób?

Ja bym zebrał wszystkie wartości wpisane na GUI do jakiegoś prostego DTO, a potem napisał walidator do tego DTO, który sprawdza je całe i potem zwraca od razu listę wszystkich błędów we wprowadzonych danych. Bez rzucania wyjątków, bo one nie są od tego.

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