2016-08-30 3 views
1

Как передать типы в свои модульные тесты?Как передать типы в метод тестирования

public void MethodUnderTest() 
{ 
    try 
    { 
     var businessService = _businessService.DoWork(); 
    } 
    catch (SomeException exception) 
    { 
     //do some stuff 
    } 
    catch (SomeOtherException exception) 
    { 
     //do other stuff 
    } 
} 


My unit test should be something like this: 

[TestCase(typeof(SomeException))]  
[TestCase(typeof(SomeOtherException))] 
public void UnitTest(Exception exception) 
{ 
    _businessService.Setup(x=>x.DoWork).Throws.InstanceOf<exception>(); 
    //verify that when we called DoWork, that the logic inside of one of the catches was executed 
} 

ответ

0

Один из способов это может быть реализовано бы, используя выведенные дженерики ..

вы будете иметь источник случай тест в тестовом приспособлении.

public static List<Exception> Exceptions => new List<Exception> 
     { 
      new InvalidOperationException(), 
      new OverflowException() 
     }; 

, а затем изменить свой метод испытания блока, как:

[Test] 
[TestCaseSource(nameof(Exceptions))] 
public void UnitTest<T>(T exception) where T : Exception, new(){ 
    _businessService.Setup(x=>x.DoWork).Throws.InstanceOf<T>(); 
     //verify that when we called DoWork, that the logic inside of one of the catches was executed 
    } 

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

0

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

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

[TestCase(typeof(SomeException))] 
[TestCase(typeof(SomeOtherException))] 
public void UnitTest(Type exceptionType) 
{ 
    Assert.That(()=>_businessService.Setup(x=>x.DoWork), 
     Throws.InstanceOf(exceptionType)); 
} 

`` `

ли я неправильно понять эту проблему?

+0

Я не думаю, что ваш код компилируется, вы используете exceptionType как тип, пока он является переменной. –

+0

Правильно ... Вы не можете использовать общий здесь. Я изменил код. – Charlie

+0

Ах! Я задавался вопросом, как я совершил эту ошибку ... Согласно отдельному уведомлению, которое я получил, похоже, что Сэм К. добавил общий вызов. Боюсь, что я не совсем понимаю, особенно, почему люди могут отредактировать ответы других людей, не оставив общественный след. :-( – Charlie