Я реализую пользовательский класс Assert, аналогичный NUnit's Assert.Обходное решение для дженериков со статическими методами
У нас есть Sonar включен с правилами StyleCop, и он жалуется, что я всегда должен использовать дженерики вместо object
. Если я изменю свой класс на общий, то я попаду в правило, что общие классы не могут иметь статические методы.
Для примера рассмотрим этот код (очень упрощенная версия моего текущего метода):
public class Assert
{
public static void PropertyHasValue(object obj, string propertyName, object expectedValue)
{
var value = obj.GetType().GetProperty(propertyName).GetValue(obj, null);
Assert.AreEqual(expectedValue, value);
}
}
Имея методы экземпляра в классе Assert не имело бы никакого смысла в моем opnion. Обобщенный метод заставит меня сделать что-то вроде этого (непроверенные) при желании использовать TestCases:
[TestCase("someProperty", 10)]
[TestCase("anotherProperty", "someString")]
public void TestMethod(string propertyName, object expectedValue)
{
Assert.PropertyHasValue<object>(myObj, propertyName, expectedValue);
}
Как я мог лучше рефакторинг этот класс, чтобы соответствовать обоим этим правилам?
Можете ли вы проиллюстрировать код? Рассматривали ли вы методы расширения? –
Класс не обязательно должен быть общим. Вместо этого создайте метод generic. – MarcinJuraszek