C # UnitTest ExpectedException

1

Я создал настраиваемый атрибут для модульного тестирования на основе ExpectedExceptionBaseAttribute:

public class ExpectedEngineExceptionAttribute : ExpectedExceptionBaseAttribute

Я переопределяю метод Verify следующим образом:

    protected override void Verify(Exception exception)
    {
        RethrowIfAssertException(exception);
        throw new Exception("Hola!!");
    }

Здесь TestMethod (он вызывает метод, который бросает a):

    [TestMethod]
    [ExpectedEngineExceptionAttribute()]
    public void MyTest()
    {
        SomeCode();
    }

Вывод в окне тестирования устройства показывает:

Exception has been thrown by the target of an invocation.

Я бы хотел увидеть сообщение Hola !!

Когда я запускаю следующий метод тестирования:

    [TestMethod]
    [ExpectedException(typeof(EngineException))]
    public void MyTest2()
    {
        SomeCode();
    }

Выход:

Метод тестирования NotificationInputAttributeInvalidTypeTest вызвал исключение System.Exception, но ожидалось исключение EngineException. Сообщение об исключении: System.Exception: SS

Что мне не хватает, чтобы в окне вывода появилось мое сообщение об исключении "Hola"?

Я декомпилировал ExpectedExceptionAttribute и сделал то, что он делает в моем настраиваемом атрибуте, но он не работает...

UPDATE: добавление точки останова подтверждает исключение ("Hola !!"):

Изображение 174551

  • 0
    Я предлагаю не использовать атрибут для определения ваших тестовых утверждений. Попытайтесь следовать стилю «AAA» и сделайте утверждение явно в коде C #. Это также облегчит его отладку. Смотрите также: darkroastjava.wordpress.com/2014/01/21/…
  • 0
    Спасибо за предложение, но мне нужно использовать атрибут.
Показать ещё 1 комментарий
Теги:
mstest

2 ответа

1

Исключение RethrowIfAssertException вызывает исключение, когда

"Выдает исключение снова, если это AssertFailedException или AssertInconclusiveException"

поэтому, если это выбрасывает исключение, он никогда не попадет в ваш бросок исключений "Hola".

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.expectedexceptionbaseattribute.rethrowifassertexception.aspx

  • 0
    Я сделал то же самое, что и ExpectedException. Кроме того, удаление исключения RethrowIfAssertException ничего не меняет. Это все еще показывает, что Исключение было брошено целью вызова.
  • 0
    Вы поставили точку останова, чтобы посмотреть, сможет ли она выбросить ваше исключение "Hola"?
Показать ещё 3 комментария
0

он отлично работает в VS 2013 Обновление 2: Изображение 174551

Код:

    [TestClass]
    public class MyTests
    {
       [TestMethod]
       [ExpectedEngineExceptionAttribute]
       public void MyTest()
       {
           throw new Exception("HI");
       }
     }

    public class ExpectedEngineExceptionAttribute : ExpectedExceptionBaseAttribute
    {
       protected override void Verify(Exception exception)
       {
           RethrowIfAssertException(exception);
           throw new Exception("Hola!!!");
       }
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню