NUnit - утверждение исключения и свойств - PullRequest
1 голос
/ 02 июля 2010

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

У меня сложилось впечатление, что я могу сделать что-то вроде следующего:

ICommand command = CreateCommandObj();
Assert.That( () => command.DoWork(), Throws.TypeOf<ArgumentException>(),                        
                     Has.Property("ParamName").EqualTo("myParam") &
Has.Property("Message").EqualTo("myMessage") );

Однако это даже не компилирует и не рассматривает ожидаемые параметры для Assert. Что я не вижу, как я смогу сделать это? Я уверен, что использовал это раньше, хотя ...

Обратите внимание, что приведенный выше пример является надуманным, чтобы проиллюстрировать эту точку, игнорируя тот факт, что я ищу ArgumentException для метода, который не имеет никаких параметров:)

Любая помощь приветствуется.

1) Невозможно преобразовать лямбда-выражение в тип «объект», так как это не тип делегата.

Ответы [ 4 ]

7 голосов
/ 02 июля 2010

Хорошо, отсортировано.

Мне нужно использовать следующий синтаксис:

ICommand command = CreateCommandObj();
Assert.That( () => command.DoWork(), 
                   Throws.TypeOf<ArgumentException>()
                   .And.Message.Equals("MyMessage"));

Этот подход позволяет мне проверять свойства сгенерированного исключения. Я могу добавить любое число И или Или в Assert.

Спасибо всем за предложения.

1 голос
/ 02 июля 2010

Вы проверяете наличие исключений с атрибутом [ExpectedException] в вашем методе. например,

[Test] 
[ExpectedException(typeof(InvalidOperationException))]
public void Test_SomeMethod()
{
    something.SomeMehthod();
}

Вы можете установить свойства ожидаемого исключения в конструкторе атрибута ExpectedException.

EDIT Вы также можете указать свои тестовые атрибуты, например:

[Test]
[ExpectedException(ExpectedException = typeof(InvalidOperationException), ExpectedMessage = "Somethings not right")]
public void Test_SomeMethond()
{
    something.SomeMehthod();
}
0 голосов
/ 16 мая 2019

Вы также можете сделать это:

var exception = Assert.Throws<ArgumentException>(() => {
    command.DoWork();
});
Assert.AreEqual("myMessage", exception.Message);
0 голосов
/ 02 июля 2010

Попробуйте && - логически и против по битам и

Редактировать :

Я думаю, что вы ищетеAssert.Throws, если вы используете интерфейс ограничений.Не уверен, как бы вы утверждали в сообщении.Я думаю, что старый стиль более понятен для того, что вы пытаетесь достичь:

  try
  {
    command.DoWork();
    Assert.Fail("ArgumentException Expected");
  }
  catch (ArgumentException e)
  {
    Assert.AreEqual("Expected Message", e.Message);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...