如何在没有try/catch块的情况下记录单元测试中抛出的异常



我使用Microsoft.VisualStudio.TestTools.UnitTesting在VisualStudio中运行我的测试。我正在做日志记录在我所有的代码在一个日志文件。在[TestInitialize]和[TestCleanup]方法中,我还记录了测试的开始/结束。

我可以通过TestContext记录测试结果。CurrentTestOutcome财产。每当在我的代码中抛出异常时,我在抛出它之前记录它,因此我的日志文件有该异常的跟踪。

但是,我不知道如何记录由我的代码引用的dll抛出的异常。这些异常由单元测试框架处理,并记录在Visual Studio中的测试资源管理器窗口中。

我如何在我的文件中记录这些异常?

我可以用try包围我的每个测试用例,并在catch块中登录。然而,由于我有许多测试用例,这是重复的/痛苦的。

知道/解决方案吗?

您可以编写一个扩展方法,该方法接受一个Action并使用适当的try/catch逻辑执行它:

    public static void WithExceptionLogging(Action testToExecute)
    {
        try
        {
            testToExecute();
        }
        catch (Exception e)
        {
            //logging logic goes here
        }
    }

然后在你的测试方法中,

        Action someTest = () =>
        {
            var expected = 1;
            var actual = Calculator.Add("1+0");
            Assert.AreEqual(expected, actual);
        };
        someTest.WithExceptionLogging();

也许你正在寻找ExpectedExceptionAttribute?

相关内容

最新更新