Могу ли я использовать информацию DebuggerDisplay в модульных тестах?
Что-то вроде:
Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo);
1 ответ
Я думаю, что лучше переопределить Equals
а также GetHashCode
методы вашего SomeClass
сравнить свойства Id и Name:
public class SomeClass
{
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
SomeClass other = obj as SomeClass;
if (other == null)
return false;
return other.Id == Id && other.Name == Name;
}
// GetHashCode implementation
}
Утверждение будет выглядеть так:
Assert.AreEqual(expectedObject, someClass);
Если вы не хотите или не можете изменить SomeClass
реализации, то вы можете создать метод, который будет делать утверждение:
public void AssertAreEqual(SomeClass expected, SomeClass actual)
{
Assert.AreEqual(expected.Id, actual.Id);
Assert.AreEqual(expected.Name, actual.Name);
}
Оценка строки отображения отладчика не простая задача, потому что DebuggerDisplayAttribute
содержит только строку формата, которая используется для оценки строкового представления объекта в отладчике. Эта строка, кроме простых имен свойств, также может содержать выражения и вызовы методов. Вы можете оценить отображаемое значение отладчика с помощью компилятора Roslyn, как описано здесь. Но я не думаю, что использование метаданных отладчика является хорошим способом проверки на равенство объектов.