不能使非单元测试异常工作.使用.net 2.0

本文关键字:使用 net 工作 异常 单元测试 不能 | 更新日期: 2023-09-27 18:02:52

无论什么原因,我似乎不能得到正确的语法。如何使下面的测试工作?我只是有一个简单的方法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)
                {
                }
            }
        }

不能使非单元测试异常工作.使用.net 2.0

除了你抛出的异常类型的问题,我会这样做。我觉得这样更有可读性。

[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");
}

你扔了一个CustomerException,但期望得到一个PersonException。然后尝试匹配两个不同的字符串("thrown" vs "throw")。

测试异常的另一种方法是在测试方法上使用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();
}