Как создать пользовательские MSTest Assert-методы с "правильным" callstack

Я пишу методы расширения для тестирования значений для моего модульного теста. Наивный пример:--3-->

public static void ShouldBeTrue(this bool value)
{
    if(!value)
    {
        throw new AssertFailedException("Expected true");
    }
}

и используя его в тест:

someBool.ShouldBeTrue();

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

есть ли способ обойти это, так что "someBool.ShouldBeTrue ();":

  1. открывается ли строка, дважды щелкнув по провальному тесту в окне результатов теста?
  2. это единственная строка в трассировке стека?

2 ответов


кажется, я нашел ответ. Все, что вам нужно сделать, это поместить пользовательские классы/методы утверждений в отдельную сборку. Вы можете иметь это как отдельный проект в том же решении, если хотите.


для этого уже написана библиотека классов: http://geekswithblogs.net/sdorman/archive/2009/01/31/adding-custom-assertions-to-mstest.aspx

есть цитата из ссылки выше:

... Для справки, эти недоступные утверждения:

  • Assert.IsNaN
  • Assert.IsEmpty
  • Assert.IsNotEmpty
  • Assert.Больше
  • Assert.GreaterOrEqual
  • Assert.Меньше
  • Assert.LessOrEqual
  • Assert.IsAssignableFrom
  • Assert.IsNotAssignableFrom
  • CollectionAssert.IsEmpty
  • CollectionAssert.IsNotEmpty
  • StringAssert.AreEqualIgnoringCase
  • StringAssert.IsMatch
  • FileAssert.AreEqual
  • FileAssert.AreNotEqual

...Я создали библиотеку классов, которая включает в себя все из них, кроме методов FileAssert и StringAssert.Выполняется. ... Вы можете загрузить класс из моей общей папки SkyDrive:https://skydrive.live.com/?cid=93d618d639ec9651&id=93D618D639EC9651%211283