2016-06-21 2 views
4

У меня есть следующая маленькая утилита я использую на протяжении всех моих модульных тестов, чтобы сравнить некоторые объекты:Используйте оператор вызова функции, как исключение происхождение при отладке

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? (без перехода в его фактическую реализацию)

ответ

5

DebuggerHiddenAttribute, примененный к вашей функции, заставит Visual Studio отображать вызывающий метод при нарушении исключения.

static class ObjectAssert 
{ 
    [DebuggerHidden] 
    public static void AreSimilar(object expected, object actual, string message) 
    { 
     // ... 
    } 
} 
Смежные вопросы