Подтвердить что ты не робот

ExpectedException на TestMethod Visual Studio 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 является настраиваемым исключением и наследует Exception.

Edit Я просмотрел настройки "Исключения" (ctrl + alt + e) ​​в 2008 и 2010 годах. В обеих версиях настройки одинаковы. Однако в 2008 году отладка не прерывается, когда у меня есть атрибут ExpectedException. В 2010 году он сломается.

4b9b3361

Ответ 2

Герри указал мне в правильном направлении:
  • Нажмите Ctrl-Alt-E
  • Откройте Excepions Runtime Common Language Node
  • Нажмите "Добавить"
  • Введите Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException
  • Убедитесь, что оба флажка не отмечены.

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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

     Assert.Fail(); // exception not thrown - fail
  }