Visual studio с xUnit, Assert.Throws и «Исключение не было обработано кодом пользователя» - PullRequest
5 голосов
/ 26 декабря 2011

Я пытаюсь запустить тесты внутри dll-приложения (VS2010 / C #), используя xUnit 1.8.0.1549. Для этого я запускаю xUnit через visual studio, используя «Запустить внешнюю программу» в разделе «Начать действие» в свойствах проекта, запустив dll через бегун GUI (C: \ mypath \ xunit.gui.clr4.x86.exe). 1001 *

Я хочу проверить, вызывают ли некоторые методы исключение, для этого я использую что-то вроде следующего:

Assert.Throws<Exception>(
   delegate
   {
       //my method to test...
       string tmp = p.TotalPayload;
   }
);

Проблема в том, что в моем методе отладчик останавливается, когда возникает исключение, говорящее «Исключение не было обработано кодом пользователя». Это плохо, потому что он постоянно останавливает бегуна, заставляя меня нажимать F5. Я хотел бы выполнить тесты гладко, как мне это сделать? Спасибо

Ответы [ 3 ]

0 голосов
/ 20 февраля 2016

Если вы войдете в параметры Visual Studio и снимите флажок с параметра «Просто мой код», платформа xUnit будет считаться пользовательским кодом, а те исключения (которые ожидает xUnit) не будут запрашивать вас.

Iне знаю способа контролировать это поведение для каждой сборки (только xUnit следует считать кодом пользователя, но не другим внешним кодом).

0 голосов
/ 13 июня 2016

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

Вот пример: У меня есть метод, который читает имя файла и выполняет некоторую обработку:

  public void ReadCurveFile(string curveFileName)
    {           
        if (curveFileName == null) //is null
            throw new ArgumentNullException(nameof(curveFileName)); 
        if (!File.Exists(curveFileName))//doesn't exists
            throw new ArgumentException("{0} Does'nt exists", curveFileName);     

... и т.д. Теперь я пишу тестовый метод для проверки этого кода следующим образом:

    [Fact]
    public void TestReadCurveFile()
    {
        MyClass tbGenTest = new MyClass ();

        try
        {
            tbGenTest.ReadCurveFile(null);
        }
        catch (Exception ex)
        {
            Assert.True(ex is ArgumentNullException);
        }
        try
        {
            tbGenTest.ReadCurveFile(@"TestData\PCMTestFile2.csv");
        }
        catch (Exception ex)
        {
            Assert.True(ex is ArgumentException);
        }

Теперь ваш тест должен пройти!

0 голосов
/ 15 января 2012

Вы можете отключить режим прерывания при исключении в VS.См. http://msdn.microsoft.com/en-us/library/d14azbfh.aspx для вдохновения как.

...