Мы использовали NUnit & VisualStudio для записи кода.NET C# некоторое время теперь. Тестирование Исключений было сделано в стиле
старый синтаксис:
[Test]
[ExpectException(typeof(ExceptionType))]
public void TestExceptionType()
{
}
Теперь NUnit выпустил версию 2.5.2, которая представила Assert.Throws( Type expectedExceptionType, TestDelegate code );
Это делает исключение, тестирующее намного более гибкий. Наши тесты исключения теперь похожи на это:
новый синтаксис:
[Test]
public void TestWithNullBufferArgument()
{
ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() => _testInstance.TestFunction(null));
// now you can examine the exception and it's properties
Assert.AreEqual(ex.Message, "Argument was null");
}
Наша проблема - это, если Утверждают. Бросками является используемая Visual Studio, выкашляет окно, показывающее необработанное исключение, когда NUnit (или консоль или бегун GUI) используется для отладки программы.
разъяснить это: мы установили проект VS, содержащий модульные тесты для выполнения nunit-x86.exe при отладке. (См. свойства проекта, отлаживая вкладку, запуститесь, действие установлено выполнить nunit-x86.exe),
Это мешает NUnit продолжить тесты. Возможно продолжить отладку/поблочное тестирование путем нажатия F5, но это не эффективное решение.
Там какой-либо путь состоит в том, чтобы избежать этого? Помещение попытки... ловит блок вокруг Утверждения. Броски ничего не делают, так как исключение происходит в коде делегата.
Я надеюсь, что кто-то может пролить некоторый свет на это.
Проблема возникает из-за того, что, скорее всего, у вас включен параметр «Включить только мой код» (Инструменты-> Параметры-> Отладка-> Общие-> Включить только мой код).
«Когда эта функция включена, отладчик отображает и переходит только в код пользователя (« Мой код »), игнорируя системный код и другой код, который оптимизирован или не имеет отладочных символов» (см. « Общие, Отладка, диалоговое окно параметров ")
Обычно у вас есть окончательная версия nunit.framework.dll, которая не имеет соответствующего файла nunit.framework.pdb.
Итак, есть 2 варианта:
Отключить функцию «Только мой код»
Загрузить исходные коды nunit (с http://www.nunit.org/index.php?p=download ]), создайте их в режиме отладки, поместите все nunit.framework. * (dll, pdb, xml) в lib или другой каталог в вашем решении и укажите этот nunit.framework.dll в своем тестовом проекте.
Надеюсь, это поможет.
Может ли быть достижем, отключая исключение. Откройте меню отладки / исключения и поиск вашего исключения.
Я думаю, вы ослеплены утверждением NUnit. Вы можете добиться того же, просто попробовав / поймав.
try
{
_testInstance.TestFunction(null);
Assert.Fail("The method should have thrown...");
}catch{}
Теперь у вас есть все, что вам нужно. Вы потерпите неудачу, если исключение не сгенерировано и ваш обычный код может обрабатывать исключения должным образом.
Это всегда будет Serializable, хотя вы можете гарантировать, что ничто в классе никогда не сериализуется, делая каждый член переходным
.
Нам нужно что-то сделать с этим простым фоном. Мы собираемся использовать изображение PNG и отображать его за UITableView.
К сожалению, вы не сможете увидеть свое прошлое. Фон UITableView блокирует просмотр UIImageView. Необходимо внести три изменения:
Задайте прозрачный цвет фона UITableView:
taiveView.backgroundColor = [UIColor clearColor];
Надеюсь, это поможет и решит вашу проблему. Это сработало для меня, и мне еще предстоит найти более элегантный способ отображения фонового изображения для UITableView.
Преимущество моего решения, по сравнению с установкой фонового изображения непосредственно в UITableView, заключается в том, что можно отступить содержимое таблицы. Я часто хотел сделать это, чтобы просто показать две или три ячейки таблицы в нижней части экрана.
-121--983095-Та же проблема также раздражала меня довольно долго, я сделал несколько тестов и обнаружил следующее:
Если библиотека (nunit в данном случае) скомпилирована с отладочной информацией, имеющей значение "none", то если в библиотеке выполняется конструкция, аналогичная приведенной ниже, и код делегата создает исключение, то VS перестает жаловаться на исключение, не обработанное кодом пользователя.
Код библиотеки:
public static Exception Throws(TestDelegate code, string message)
{
Exception caughtException = null;
try
{
code();
}
catch (Exception ex)
{
caughtException = ex;
}
return caughtException;
}
Код клиента:
private void btnTest_Click(object sender, EventArgs e)
{
var ex = MyAssert.Throws(() => { throw new Exception(); }, "");
}
Установка для отладочной информации проекта библиотеки любого другого параметра, отличного от "none", устраняет проблему, т.е. отладчик больше не останавливается на этих "необработанных" исключениях. Я протестировал его с помощью nunit и собственной рулонной библиотеки с приведенным выше кодом (взял фрагмент из метода nunit 's Throws). Я полагаю, что это функция или "функция" VS.
Это оставляет нам не так много вариантов:
Фильтр исключение, как ранее предлагал
Recompile nunit.framework.dll для локального использования, чтобы избежать этих раздражающих остановок
Другие варианты могут быть связаться либо MS или NUnit команды или оба и попросить их исследовать/прояснить проблему и компилировать NUnit с минимальным уровнем отладки
Изменить:
Найден еще один вариант.