У меня есть следующая маленькая утилита я использую на протяжении всех моих модульных тестов, чтобы сравнить некоторые объекты:Используйте оператор вызова функции, как исключение происхождение при отладке
static class ObjectAssert
{
public static void AreSimilar(object expected, object actual, string message)
{
var serializer = new JavaScriptSerializer();
if (serializer.Serialize(expected) != serializer.Serialize(actual))
{
throw new AssertFailedException(message);
}
}
}
В основном все это делает сериализацию expected
и actual
в формат JSON, а затем сравнить результирующие строки, что упрощает сравнение публичной видимой части объектов. И я использую его в качестве такового:
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public void UnitTest1()
{
var expected = new Person() { FirstName = "John", LastName = "Doe" };
var actual = new Person() { FirstName = "John", LastName = "Dae" };
// ...
ObjectAssert.AreSimilar(expected, actual, "Object mismatch.");
}
Этот пример явно бросаться AssertFailedException, потому что actual.LastName
не соответствует expected.LastName
.
Однако вместо остановки на линии ObjectAssert.AreSimilar
во время отладки (как это происходит с Assert.AreEqual
, например), Visual Studio откроет ObjectAssert.cs файл (это где ObjectAssert
класс определен) и остановитесь на линии throw new AssertFailedException(message)
.
Как я могу сделать так, что отладчик вместо останавливается на ObjectAssert.AreSimilar
линии (в тесте на единицу), подобно тому, как это происходит при использовании Assert.AreEqual
? (без перехода в его фактическую реализацию)