Могу ли я использовать информацию 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, как описано здесь. Но я не думаю, что использование метаданных отладчика является хорошим способом проверки на равенство объектов.

Другие вопросы по тегам