Ожидаемое исключение отрицательных тестов Nunit

У меня есть класс, в котором я проверяю индекс или длину строки. И я хочу написать отрицательный тест Nunit:

  • если длина строки вне допустимого диапазона, Nunit Test верен. Или первый индекс - это цифра «ложь», тест Nunit верен.

Что я пробую:

Мой CheckKeyClass:

public void SetKey(string keyToAnalyse) 
{
  Line = new string[keyToAnalyse.Length];
  int nummeric;
  bool num;  

  if (Line.Length == 0 || Line.Length < 24) 
  {
    throw new Exception("Index Out of Range " + Line.Length);
  }
  // Ist Product a Character
  num = int.TryParse(Line[0], out nummeric);
  if (!num) 
  {
    if (Line[0] == "K") 
    {
      Product = 0;
    }
  } 
  else 
  {
    throw new Exception("The Productnumber is not right: " + Line[0] ". \nPlease give a Character.");
  }
}

Мой тест Nunit:

[Test]
public void NegativeTests() 
{
  keymanager.SetKey("KM6163-33583-01125-68785");
  // Throws<ArgumentOutOfRangeException>(() => keymanager.Line[24]);
}

// ExpectedException Handling
public static void Throws<T>(Action func) where T : Exception 
{
  var exceptionThrown = false;
  try 
  {
    func.Invoke();
  } 
  catch (T) 
  {
    exceptionThrown = true;
  }

  if (!exceptionThrown) 
  {
    throw new AssertFailedException(String.Format("An exception of type {0} was expected, but not thrown", typeof(T)));
  }
}

Таким образом, если длина линии вне допустимого диапазона, тест также должен быть зеленым. Как мне использовать, что Тесты верны?

Спасибо


person Andreas01    schedule 02.10.2013    source источник
comment
вы не можете использовать встроенный Assert.Throws<T>?   -  person Cristian Lupascu    schedule 02.10.2013


Ответы (1)


Используйте 1_

string keyHasLengthOf24 = "KM6163-33583-01125-68785";

var ex = Assert.Throws<Exception>(() => keymanager.SetKey(keyHasLengthOf24));

Assert.That(ex.Message, Is.EqualTo("Index Out of Range "));

Дополнительные сведения см. В этом SO-ответе.

person Sam Leach    schedule 02.10.2013