Ожидаемое исключение в TestMethod Visual Studio 2010 - PullRequest
20 голосов
/ 13 апреля 2010

Сегодня я обновил свое решение со всеми базовыми проектами с VS2008 до VS2010. Все прошло хорошо, за исключением моих юнит-тестов.

Прежде всего, только веб-проекты имели в качестве целевой платформы .NET 4. Все остальные проекты все еще имели .NET 3.5. Я изменил их все на .NET 4.

Теперь, когда я отлаживаю свои юнит-тесты, он ломается при каждом исключении. В 2008 году он просто не пройдет и не скажет мне, что произошло исключение. Даже когда у меня определен атрибут ExpectedException, он останавливает отладку для каждого исключения.

И пример одного из моих тестов:

[TestMethod]
[ExpectedException(typeof(EntityDoesNotExistException))]
public void ConstructorTest()
{
    AddressType type = new AddressType(int.MaxValue);
}

EntityDoesNotExistException является пользовательским исключением и наследует исключение.

Редактировать Я посмотрел на настройки исключений (Ctrl + Alt + E) в 2008 и 2010 годах. В обеих версиях настройки одинаковы. Однако в 2008 году отладка не прерывается, когда у меня есть атрибут ExpectedException. В 2010 году он сломался.

Ответы [ 8 ]

12 голосов
/ 30 июня 2010

Джерри указал мне правильное направление:

  • Нажмите Ctrl-Alt-E
  • Открыть узел исключений общего языка
  • Нажмите Добавить
  • Тип Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException
  • Убедитесь, что оба флажка сняты.

Это избавит от разрыва при неудачных утверждениях, но тест все равно будет прерван, если вы установили ExpectedException.

Я был тем, кто установил 100 бонус за это, поэтому некоторые оценки будут оценены; -)

8 голосов
/ 03 декабря 2010
2 голосов
/ 14 октября 2010

Сотрудник службы поддержки Microsoft сказал мне использовать Ctrl-F5 (запуск без отладки) при запуске моих модульных тестов, и это, похоже, работает.

Еще одна вещь, которую стоит попробовать - перейти в Инструменты | Параметры | Отладка. и снимите флажок «Включить только мой код».

2 голосов
/ 13 апреля 2010

Нажмите Ctrl + Alt + E и проверьте настройку разрыва для исключений для CLR. Если для этого параметра установлено значение true, то поведение, которое вы описали, будет иметь место.

1 голос
/ 11 марта 2011

Я второй, что сказал Rlandster. Отключение параметра «Включить только мой код» исправило это для меня. Это исправило как взлом на ассемблерах, так и взлом ожидаемых исключений Есть немного больше деталей об этом в http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/25bdf149-5133-4f47-bbf2-1d4ca638fee9.

1 голос
/ 27 мая 2010

Убедитесь, что вы ссылаетесь на Microsoft.VisualStudio.QualityTools.UnitTestingFramework версии 10.0.0.0.

Если это версия 9.0.0.0, эта проблема будет возникать в Visual Studio 2010.

Надеюсьэто помогает.Если люди все еще имеют эту проблему.

0 голосов
/ 01 марта 2013

Я закончил тем, что изменил свои тесты на эту форму, чтобы избежать взлома. Не идеально:

  [TestMethod]
  public void Guid()
  {
     try
     {
        Guid g = new Guid("myguid'123'");
     } 
     catch( FormatException fe)
     {
        return;  // expected exception - pass
     }

     Assert.Fail(); // exception not thrown - fail
  }
0 голосов
/ 18 апреля 2010

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

  • Преобразован тестируемый проект в .NET 4
  • Выключен CodeCoverage
  • Снова включил CodeCoverage
  • сделал RebuildAll на тестовом проекте

Не уверен, какой бит исправил это. В любом случае, надеюсь, это поможет!

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