Проверьте свойство исключения с NUnit 2.6 - PullRequest
7 голосов
/ 02 сентября 2011

Какой самый идиоматичный способ с NUnit 2.6 проверить равенство свойства исключения?

Код, который я хотел бы написать, но делает не работает: Expected 3, but was <empty>

Assert.That(() => someObject.MethodThrows(),
  Throws.TypeOf<SomeException>().With.Property("Data").Count.EqualTo(3), /* Data is a collection */
  "Exception expected");

Я мог бы использовать вложенные Assert выражения, но это кажется слишком сложным и ненужным:

  Assert.AreEqual(3,
    Assert.Throws<SomeException>(
      () => someObject.MethodThrows(),
      "Exception expected").Data.Count);

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

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Я не могу говорить с NUnit 2.6, но в NUnit 2.5 следующий тест:

Public Class MyException
    Inherits Exception
    Public Property SomeList As New List(Of String) From {"hello", "world"}
End Class

<TestFixture()>
Public Class TestClass1
    Public Shared Sub DoSomething()
        Throw New MyException()
    End Sub

    <Test()>
    Public Sub TestExample()
        Assert.That(Sub() DoSomething(), Throws.TypeOf(Of MyException)().With.Property("SomeList").Count.EqualTo(3))
    End Sub
End Class

выдает следующее сообщение об ошибке:

Expected: <ClassLibrary1.MyException> and property SomeList property Count equal to 3
But was:  < "hello", "world" >

Может ли это быть просто регрессиейв бета-версии NUnit 2.6?

1 голос
/ 02 сентября 2011

Я бы пошел с этим:

var exception = Assert.Throws<SomeException>(() => someObject.MethodThrows(),
                                             "Exception expected")
Assert.AreEqual(3, exception.Data.Count);

Это самое ясное, что вы можете получить:

  • В отличие от вашего первого примера, это безопасный рефакторинг
  • Он утверждает одну вещь за раз, а не несколько, как в обоих ваших примерах.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...