单元测试未完成,被测试的方法仅引发异常。我想念什么?

时间:2019-07-18 19:57:57

标签: c# nunit

我目前正在通过C#课程进行单元测试-专门针对NUnit(我正在将NUnit 3.8.1与NUnit3TestAdapter 3.1.13结合使用)。

我的问题是,当我测试要抛出的异常时,调试器会停止并在要测试的方法上抛出异常。我不确定自己是否误解了行为,但看不到自己做错了什么。

首先-我已经阅读了documentation,看不到问题。

我还浏览了堆栈溢出中的其他各种帖子,这些帖子似乎并没有完全指出答案,因为这些解决方案都不适合我。

Is there some Assert method which can be used for unit test on whether a method throws an exception?

C# Unit Testing - Test method throwing NullReferenceException

Why, when I am testing that a method throws an exception and the method throw an exception, does the test stop?

我正在测试的课程如下(由该课程的讲师提供-他们证明了这是可行的)。


using System;

namespace TestNinja.Fundamentals
{
    public class ErrorLogger
    {
        public string LastError { get; set; }

        public event EventHandler<Guid> ErrorLogged; 

        public void Log(string error)
        {
            if (String.IsNullOrWhiteSpace(error))
                throw new ArgumentNullException();

            LastError = error; 

            // Write the log to a storage
            // ...

            ErrorLogged?.Invoke(this, Guid.NewGuid());
        }
    }
}

最后,我的测试方法-

using NUnit.Framework;
using TestNinja.Fundamentals;

namespace TestNinja.UnitTests
{
    [TestFixture]
    public class ErrorLoggerTests
    {
        //private ErrorLogger _errorLogger;

        [SetUp]
        public void SetUp()
        {
            //_errorLogger = new ErrorLogger();
        }

        [Test]
        public void Log_WhenCalled_SetTheLastErrorProperty()
        {
            var logger = new ErrorLogger();

            logger.Log("a");

            Assert.That(logger.LastError, Is.EqualTo("a"));
        }

        [Test]
        [TestCase(null)]
        [TestCase("")]
        [TestCase(" ")]
        public void Log_InvalidError_ThrowArgumentNullException(string error)
        {
            var logger = new ErrorLogger();
            Assert.That(() => logger.Log(error), Throws.ArgumentNullException);
        }
    }
}

我正在谈论的测试是Log_InvalidError_ThrowArgumentNullException。在每个测试用例中,代码在throw new ArgumentNullException();中的行ErrorLogger处中断。我必须关闭包装盒并继续运行代码。

当我单独运行此测试时,该测试将运行到完成,但是当我全部运行该测试时,将引发异常并停止测试。

最初,我的单元测试没有使用SetUp方法,并且我正在使用该私有字段,但是我换了一个新实例,以确保对象的持久性没有任何问题。

0 个答案:

没有答案