ExceptionAsserts и отладка Вашего проекта C# в VS

Мы использовали 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, но это не эффективное решение.

Там какой-либо путь состоит в том, чтобы избежать этого? Помещение попытки... ловит блок вокруг Утверждения. Броски ничего не делают, так как исключение происходит в коде делегата.

Я надеюсь, что кто-то может пролить некоторый свет на это.

8
задан Timo Kosig 5 February 2010 в 20:30
поделиться

4 ответа

Проблема возникает из-за того, что, скорее всего, у вас включен параметр «Включить только мой код» (Инструменты-> Параметры-> Отладка-> Общие-> Включить только мой код).

«Когда эта функция включена, отладчик отображает и переходит только в код пользователя (« Мой код »), игнорируя системный код и другой код, который оптимизирован или не имеет отладочных символов» (см. « Общие, Отладка, диалоговое окно параметров ")

Обычно у вас есть окончательная версия nunit.framework.dll, которая не имеет соответствующего файла nunit.framework.pdb.

Итак, есть 2 варианта:

  1. Отключить функцию «Только мой код»

  2. Загрузить исходные коды nunit (с http://www.nunit.org/index.php?p=download ]), создайте их в режиме отладки, поместите все nunit.framework. * (dll, pdb, xml) в lib или другой каталог в вашем решении и укажите этот nunit.framework.dll в своем тестовом проекте.

Надеюсь, это поможет.

7
ответ дан 5 December 2019 в 19:00
поделиться

Может ли быть достижем, отключая исключение. Откройте меню отладки / исключения и поиск вашего исключения.

-1
ответ дан 5 December 2019 в 19:00
поделиться

Я думаю, вы ослеплены утверждением NUnit. Вы можете добиться того же, просто попробовав / поймав.

try
{
  _testInstance.TestFunction(null);
  Assert.Fail("The method should have thrown...");
}catch{}

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

1
ответ дан 5 December 2019 в 19:00
поделиться

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

-121--1719105-

Нам нужно что-то сделать с этим простым фоном. Мы собираемся использовать изображение PNG и отображать его за UITableView.

  1. Подготовка образа PNG. Он должен быть 320x460 (если в приложении отображается строка состояния) или 320x480 (если вы его скрываете).
  2. Перетащите его в XCode в папку Resources и добавьте в проект
  3. Загрузите файл NIB, содержащий UITableView, в Interface Builder
  4. Откройте библиотеку (Tools > Library), перейдите на вкладку Media и перетащите изображение в представление, создайте новое UIImageView.
  5. Используйте инспектор для перемещения и изменения размера изображения таким образом, чтобы оно находилось на значках X = 0, Y = 0, Width = 320, Height = 480
  6. Поместите UIImageView за UITableView (Layout > Send to Back)
  7. Save, Build and Go!

К сожалению, вы не сможете увидеть свое прошлое. Фон UITableView блокирует просмотр UIImageView. Необходимо внести три изменения:

  1. В инспекторе атрибутов убедитесь, что флажок UITableView "непрозрачный" не установлен!
  2. Задайте прозрачный цвет фона 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.

Это оставляет нам не так много вариантов:

  1. Фильтр исключение, как ранее предлагал

  2. Recompile nunit.framework.dll для локального использования, чтобы избежать этих раздражающих остановок

Другие варианты могут быть связаться либо MS или NUnit команды или оба и попросить их исследовать/прояснить проблему и компилировать NUnit с минимальным уровнем отладки

Изменить:

Найден еще один вариант.

  1. В моем случае снятие флажка "Подавить оптимизацию JIT при загрузке модуля" также делает трюк,даже если библиотеки скомпилированы без отладочной информации. Однако он работает только при запуске проекта в конфигурации версии.
2
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: