Как использовать атрибуты модульного теста с MsTest с помощью C#?
Как проверить наличие атрибутов класса и атрибутов метода с помощью MsTest с помощью C#?
3 ответов
метод расширения C# для проверки атрибутов
public static bool HasAttribute<TAttribute>(this MemberInfo member)
where TAttribute : Attribute
{
var attributes =
member.GetCustomAttributes(typeof(TAttribute), true);
return attributes.Length > 0;
}
используйте отражение, например, вот один в nunit + C#, который легко адаптируется к 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
напишите себе две вспомогательные функции (используя отражение) по следующим строкам:
public static bool HasAttribute(TypeInfo info, Type attributeType)
public static bool HasAttribute(TypeInfo info, string methodName, Type attributeType)
тогда вы можете написать такие тесты:
Assert.IsTrue(HasAttribute(myType, expectedAttribute));
таким образом, вам не нужно использовать if/else/foreach или другую логику в ваших методах тестирования. Таким образом, они становятся гораздо более ясными и читаемыми.
HTH
Томас!--3-->