ThrowingException, вызывающий перерыв UnitTest? - PullRequest
0 голосов
/ 03 января 2019

У меня есть ситуация, когда в какой-то момент фактическая функция выдает исключение, и я написал для него модульный тест, но, к сожалению, тестовый модуль не пройден.

Пример кода :

// 'CheckNumber()' function is Present in 'Number' class.

public int CheckNumber(int Number)
{
    if (Number < 0 || Number > MaxNumber) // MaxNumber = 300
       throw new ArgumentOutOfRangeException();

    //..     
}     

Модульный тест :

Я использую NUnit Framework .

// When The Number is Less than Zero Or Greater than Maximun Number

[Test]
public void CheckNumberTest()
{
   Number number = new Number();
   int returnedValue = number.CheckNumber(-1);

   // Assertion.
   Assert.That(returnedValue , Throws.ArgumentOutOfRangeException);
}

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

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Проблема в том, что ваш метод не возвращает никакого значения, а выдает исключение.

int returnedValue = number.CheckNumber(-1); //throws ArgumentOutOfRangeException

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

Правильный способ написания теста - использовать Assert.Throws<TException>.

[Test]
public void CheckNumberTest()
{
    //Arrange
   Number number = new Number();

   //Act
   var throws = new TestDelegate(() => number.CheckNumber(-1));

   //Assert.
   Assert.Throws<ArgumentOutOfRangeException>(throws);
}
0 голосов
/ 03 января 2019

Пожалуйста, проверьте документацию здесь !

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

// Require an ApplicationException - derived types fail!
Assert.Throws( typeof(ApplicationException), code );
Assert.Throws<ApplicationException>()( code );

// Allow both ApplicationException and any derived type
Assert.Throws( Is.InstanceOf( typeof(ApplicationException), code );
Assert.Throws( Is.InstanceOf<ApplicationException>(), code );

// Allow both ApplicationException and any derived type
Assert.Catch<ApplicationException>( code );

// Allow any kind of exception
Assert.Catch( code )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...