Невозможно сделать исключение теста nunit для работы. Использование .net 2.0 - PullRequest
2 голосов
/ 21 июля 2011

по какой-то причине я не могу понять синтаксис правильно. Как вы выполняете следующий тест? У меня просто есть простой метод TestThrowexception, и я хочу, чтобы он прошел что я тут не так делаю?

           [TestFixture]
            public class ExceptionsTests
            {       
                [Test]
                public void When_calling_my_method_it_should_throw_an_exception()
                {
                //THIS DOES NOT WORK
                    Person person=new Person();

                    PersonException ex = Assert.Throws<PersonException>(delegate { person.ThrowPersonException(); },
                                                             Has.Property("Message").EqualTo("Test person Exception throw"));

                }
            }

            public class Person
            {
                public void ThrowException()
                {
                    throw new Exception("Test Exception thrown");
                }
                public void ThrowPersonException()
                {
                    throw new CustomerException("Test person Exception thrown");
                }


                public void ThrowArgumentException(string myParam)
                {
                    throw new ArgumentException("Argument Exception", myParam);
                }
            }
            [Serializable]
            public class PersonException : Exception
            {

                public PersonException()
                {
                }

                public PersonException(string message)
                    : base(message)
                {
                }

                public PersonException(string message, Exception inner)
                    : base(message, inner)
                {
                }

                protected PersonException(
                    SerializationInfo info,
                    StreamingContext context)
                    : base(info, context)
                {
                }
            }
        }

Ответы [ 3 ]

0 голосов
/ 21 июля 2011

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

[Test]
public void When_calling_my_method_it_should_throw_an_exception()
{
    Person person=new Person();
    PersonException ex = Assert.Throws<PersonException>(delegate { person.ThrowPersonException(); });
    Assert.That(ex.Message,Is.EqualTo("Test person Exception thrown");
}
0 голосов
/ 24 июля 2011

Альтернативным способом проверки исключений является использование атрибута ExpectedException в вашем методе тестирования. ИМО это еще более читабельно. Все зависит от того, что у вас работает.

[Test]
[ExpectedException(typeof(PersonException), ExpectedMessage = "Test person Exception thrown")]
public void When_calling_my_method_it_should_throw_an_exception()
{
    Person person=new Person();
    person.ThrowPersonException();
}
0 голосов
/ 21 июля 2011

Вы бросаете CustomerException, но ожидаете PersonException. И вы пытаетесь сопоставить две разные строки («бросили» против «бросить»).

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