Ответ 1
По словам Microsoft, это не ошибка, она "по дизайну":
Сегодня я обновил свое решение со всеми базовыми проектами от 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 году он сломается.
По словам Microsoft, это не ошибка, она "по дизайну":
Это избавит вас от неудачных неудачных утверждений, но тест по-прежнему будет прерываться, если вы установите ExpectedException.
Я был тем, кто установил 100 бонусов за это, поэтому некоторые преимущества будут оценены, -)
Нажмите Ctrl + Alt + E и проверьте настройку исключения для исключений CLR. Если это значение равно true, то описанное вами поведение произойдет.
Помощник службы поддержки Microsoft сказал мне использовать Ctrl-F5 (начало без отладки) при выполнении моих модульных тестов, и это, похоже, работает.
Еще одна вещь, которую стоит попробовать - перейти в Инструменты | Параметры | Отладка и снимите флажок "Включить только мой код".
Убедитесь, что ваша ссылка на Microsoft.VisualStudio.QualityTools.UnitTestingFramework - это версия 10.0.0.0.
Если это версия 9.0.0.0, эта проблема возникнет в Visual Studio 2010.
Надеюсь, это поможет. Если у людей все еще есть эта проблема.
Я второй, что сказал Рлэндстер. Очистка опции отладки "Включить только мой код" исправила это для меня. Это фиксировало как разрывание утверждений, так и нарушение ожидаемых исключений. Там немного подробнее об этом на http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/25bdf149-5133-4f47-bbf2-1d4ca638fee9.
У меня была такая же проблема, но, наконец, мне удалось ее запустить. Не совсем уверен, как, но здесь список вещей, которые я сделал между ним, не работая, когда он снова начал работать.
Не уверен, какой бит исправил его. В любом случае, надеюсь, что это поможет!
Я закончил тем, что менял тесты на эту форму, чтобы избежать разрыва. Не идеально:
[TestMethod]
public void Guid()
{
try
{
Guid g = new Guid("myguid'123'");
}
catch( FormatException fe)
{
return; // expected exception - pass
}
Assert.Fail(); // exception not thrown - fail
}