Jestem względnie nowy w testowaniu jednostkowym i bardzo nowym w C#, ale próbowałem przetestować kod, który używa klas statycznych metodami statycznymi i wygląda na to, że mam napisać ogromne ilości kodu standardowego w celu przetestowania, a ten kod również prawdopodobnie musiałby zostać przetestowany.Testowanie klas statycznych i metod w języku C# .NET
Na przykład: używam klasy System.Web.Security.Membership, z metodą ValidateUser
na jej temat. Wygląda na to, że muszę utworzyć interfejs IMembership
zawierający metodę ValidateUser
, a następnie utworzyć klasę MembershipWrapper
, która implementuje IMembership
, implementując metodę ValidateUser
i przekazując argumenty do rzeczywistej klasy Membership
. Następnie potrzebuję mieć właściwości na mojej klasie, która używa Membership
, aby odwołać się do opakowania, aby móc wstrzyknąć zależność dla symulowanego obiektu podczas testowania.
Aby przetestować 1 linię kodu korzystającą z Membership
, musiałem utworzyć interfejs i klasę oraz dodać właściwość i kod konstruktora do mojej klasy. To wydaje się złe, więc muszę coś złego zrobić. Jak powinienem sprawdzać te testy? Przyjrzałem się krótko niektórym frameworiom/bibliotekom, które stosują iniekcję zależną, ale nadal wydają się wymagać mnóstwa danych podstawowych lub bardzo głębokiego zrozumienia tego, co dzieje się pod maską.
Jestem za to, że mój kod luźno, a wtrysk zależność wydaje się, że sposób, aby to zrobić.Wydaje się, że jeśli coś tak podstawowego i ważnego dla każdej aplikacji będzie wymagało tak dużo kodu, to zostałoby to rozwiązane, ale nie mogę znaleźć niczego, co by tak wyglądało, rozwiązuje problem. – danpalmer
@danpalmer faktycznie możesz użyć czegoś takiego jak TypeMock do udawania statycznych metod, ale to nie sprawi, że twój kod luźno sprzężony –
Tak, TypeMock nie jest tak naprawdę opcją, ponieważ jest to płatne oprogramowanie i trzymam się rzeczy open source tak bardzo jak mogę w tej sprawie. Ale dzięki za rekomendację. – danpalmer