NUnit - ExpectedMessage отличается ошибкой - PullRequest
4 голосов
/ 09 июня 2010

Я новичок в TDD и собираюсь с NUnit и Moq. У меня есть метод, в котором я ожидаю исключения, поэтому я хотел немного поиграть с возможностями фреймворков.

Мой тестовый код выглядит следующим образом:

    [Test]
    [ExpectedException(ExpectedException = typeof(MockException), ExpectedMessage = "Actual differs from expected")]
    public void Write_MessageLogWithCategoryInfoFail()
    {
        string message = "Info Test Message";

        Write_MessageLogWithCategory(message, "Info");

        _LogTest.Verify(writeMessage =>
            writeMessage.Info("This should fail"),
            "Actual differs from expected"
        );
    }

Но я всегда получаю сообщение об ошибке о том, что сообщение об ошибке о том, что фактическое сообщение об исключении отличается от ожидаемого сообщения. Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 09 июня 2010

К сожалению, у тестировщика Resharper есть ошибка / ограничение - он не обрабатывает атрибуты ExpectedException.У вас есть 2 варианта:

  1. Использовать какой-нибудь другой тестовый прогон (например, nunit-gui.exe, поставляется с NUnit) - но при таком подходе затрудняется отладка ваших тестов

  2. Поймать и проверить исключение вручную, используя следующий шаблон:

    [Test] public void Write_MessageLogWithCategoryInfoFail () {try {string message = "Info Test Message";

      Write_MessageLogWithCategory(message, "Info");
    
      _LogTest.Verify(writeMessage =>
          writeMessage.Info("This should fail"),
          "Actual differs from expected"
      );
      Assert.Fail("Expected exception");
    }
    catch(MockException e)
    {
      Assert.AreEqual("Actual differs from expected", e.Message);
    }
    

    }

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

Надеюсь, на заметкучто приведенный выше код предназначен только для игры с фреймворком - обычно вы никогда не поймаете MockExceptions:)

2 голосов
/ 15 июля 2012

Вы можете использовать дополнительный параметр MatchType = MessageMatch.Regex.

...