Jak sprawdzić obecność atrybutów klas i atrybutów metod za pomocą MsTest przy użyciu C#?Jak przeprowadzić testowanie atrybutów za pomocą MsTest przy użyciu C#?
Odpowiedz
C# Extension method for checking attributes
public static bool HasAttribute<TAttribute>(this MemberInfo member)
where TAttribute : Attribute
{
var attributes =
member.GetCustomAttributes(typeof(TAttribute), true);
return attributes.Length > 0;
}
Użyj refleksji, na przykład tutaj jest jeden w nunit + C#, który można łatwo dostosować do MsTest.
[Test]
public void AllOurPocosNeedToBeSerializable()
{
Assembly assembly = Assembly.GetAssembly(typeof (PutInPocoElementHere));
int failingTypes = 0;
foreach (var type in assembly.GetTypes())
{
if(type.IsSubclassOf(typeof(Entity)))
{
if (!(type.HasAttribute<SerializableAttribute>())) failingTypes++;
Console.WriteLine(type.Name);
//whole test would be more concise with an assert within loop but my way
//you get all failing types printed with one run of the test.
}
}
Assert.That(failingTypes, Is.EqualTo(0), string.Format("Look at console output
for other types that need to be serializable. {0} in total ", failingTypes));
}
//refer to Robert's answer below for improved attribute check, HasAttribute
Przy odrobinie pracy, założę się, że można by przekształcić 'IsTypeSerializable' w ogólną metodę, która poradzi sobie z dowolnym atrybutem. –
@Robert, absolutnie, może również lepiej przeczytać jako rozszerzenie w System.Type, które mogę dodać do cholery – dove
@Robert, miał małą zabawkę z tym i jest to całkiem wykonalne, ale myślę, że to tylko bałagan odpowiedzi powyżej. Moja odpowiedź jest bardzo ściśle ustalona z myślą o testowaniu, mając na pamięci błędne typy zapisane na konsoli. Metoda rozszerzenia może mieć sygnaturę: public static bool IsTypeSerializeable (ten typ System.Type, System.Type checkType) // chociaż możesz chcieć mieć atrybut jako drugi parametr, potrzebuje trochę więcej pracy, którą chciałbym robić tylko jeśli było to wymagane. okej, włożę to;) – dove
Napisz sobie dwie funkcje pomocnicze (przy użyciu odbicia) wzdłuż tych linii:
public static bool HasAttribute(TypeInfo info, Type attributeType)
public static bool HasAttribute(TypeInfo info, string methodName, Type attributeType)
Następnie można pisać testy tak:
Assert.IsTrue(HasAttribute(myType, expectedAttribute));
W ten sposób nie trzeba użyć, jeśli/else/foreach lub innej logiki w swoich metodach testowych. Dzięki temu stają się o wiele bardziej przejrzyste i czytelne.
HTH
Thomas
Masz punkt, ale mój test (i inne, których tutaj nie umieściłem) polega na tym, że przy jednym uruchomieniu testowym otrzymujesz wszystkie uszkodzone jednostki wyprowadzone na konsolę , oszczędzając wielokrotne powtórzenia testu dla każdego upadającego podmiotu, jak Robert dał, są jeszcze bardziej eleganckie sposoby. – dove
- 1. Testowanie pola prywatnego przy użyciu MSTest
- 2. Ustawianie atrybutów pliku przy użyciu natywnych funkcji C/C++
- 3. potwierdzenia przy użyciu atrybutów
- 4. Jak przeprowadzić uwierzytelnianie za pomocą protokołu SOAP?
- 5. Jak można przetestować kod asynchroniczny przy użyciu MSTest
- 6. Testowanie jednostkowe kodu C++ za pomocą Javy
- 7. Jak przeprowadzić uwierzytelnianie za pomocą Node.js, Express i Mongoose?
- 8. Jak ustawić wartości atrybutów przy użyciu odbicia
- 9. Uzyskiwanie elementu bez atrybutów przy użyciu Jsoup
- 10. Jak przeprowadzić wstępną inicjalizację w C/C++ za pomocą avr-gcc?
- 11. Testowanie za pomocą HTF
- 12. Testowanie danych w języku C# przy użyciu tablic
- 13. Testowanie naprężeń przy użyciu ogórka
- 14. Testowanie alertów javascript przy użyciu Capybara
- 15. Testowanie przy użyciu FragmentActivity Junit
- 16. Testowanie golang przy użyciu plików lokalnych
- 17. Testowanie za pomocą Thread.sleep
- 18. Wiosenne testowanie za pomocą @Configurable
- 19. Testowanie prostej usługi AngularJS przy użyciu Jasmine
- 20. Testowanie działań IO za pomocą Monadic QuickCheck
- 21. Jak przeprowadzić aktualizację wsadową za pomocą macierzy Codeigniter?
- 22. Testowanie, czy zdalna kolejka wiadomości istnieje (przy użyciu C#).
- 23. Testowanie jednostek za pomocą C/C++: Lekcje, o czym pamiętać?
- 24. Jak przeprowadzić test jednostkowy Regulator kątowy za pomocą $ scope. $ On?
- 25. Szyny: zapytania grupowania atrybutów przy użyciu AREL
- 26. Testowanie sprężynowego @RequestBody przy użyciu Spring MockMVC
- 27. Testowanie "Utwórz post" za pomocą Rspec
- 28. Powtarzanie atrybutów elementów za pomocą jQuery
- 29. Uwierzytelnianie za pomocą usługi przy użyciu tokenów
- 30. Dodawanie atrybutów do pliku manifestu pliku jar przy użyciu Gradle
To wydaje się przesadą. Możesz po prostu sprawdzić kod źródłowy. – jason
W rzeczywistości tego typu rzeczy są całkiem dobre do łapania błędów refaktorskich. Ważne jest również sprawdzenie, czy kod oparty na atrybutach jest dobrze przetestowany (i zapewnia przyzwoite komunikaty o błędach). –
i jest to wymagane przez TDD –