Отладчик утверждает, что ваше исключение не обрабатывается кодом пользователя, что технически верно. Для демонстрации я буду использовать образец теста, предоставленный
[Test]
public void demonstrateThatExceptionThrown()
{
string value;
Dictionary<string, string> test = new Dictionary<string, string>();
Assert.Throws(typeof(KeyNotFoundException), () => value = test["h"]);
}
Когда вы выполните его, вы получите предупреждение в VisualStudio, что исключение не обрабатывается в коде пользователя. Если вы посмотрите на стек вызовов, вы увидите что-то вроде
[External Code]
CodeTests.DLL!CodeTests.MiscTests.demonstrateThatExceptionThrown.AnonymousMethod()
[External Code]
CodeTests.DLL!CodeTests.MiscTests.demonstrateThatExceptionThrown()
[External Code]
Поскольку вы указали делегата, исключение происходит в созданном «AnonymousMethod». Это называется .Net Framework. Отладчик останавливается, потому что ваш делегат не обрабатывает исключение до того, как оно будет передано обратно в платформу. Неважно, что дальше вверх по стеку это может быть обработано в вашем коде (возможно, поскольку нет способа гарантировать, что внешний код будет правильно обрабатывать исключение.)
Чтобы VisualStudio рассматривал это как обработанное исключение, используйте атрибут ExpectedException и удалите делегат, например, так:
[Test]
[ExpectedException(typeof(KeyNotFoundException))]
public void demonstrateThatExceptionThrown()
{
string value;
Dictionary<string, string> test = new Dictionary<string, string>();
value = test["h"];
}