首页 > 解决方案 > 如何一般地处理测试断言

问题描述

我想在单元测试时记录所有断言,而不会过多地侵入代码。理想情况下,我想要一种方法来挂钩任何测试断言,如 Assert.IsTrue,如果它失败,则将断言和消息记录到我的应用程序日志中(使用 log4net)。

日志记录在并行测试场景中特别有用。除非我对每个测试都使用 try catch throw,否则我看不到这样做的方法 - 太多的代码膨胀?

相信很多人都有类似的需求。我正在使用最新的 Visual Studio 17 和 Resharper MSTestV2 测试框架和适配器 v1.4.0。有任何想法吗?我错过了显而易见的事情吗?

提前致谢亲切的问候特里

标签: c#unit-testingvisual-studio-2017mstest

解决方案


可能有一些库可以使用开箱即用的记录器进行断言,但是如果您只想自己做,而不是为每个测试编写 try catch,您可以使用接受动作作为参数的方法。此操作可以接受任何断言方法。

像这样的东西:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        AssertLogger.AssertWithLogs(() => Assert.IsTrue(false));
    }

    [TestMethod]
    public void TestMethod2()
    {
        AssertLogger.AssertWithLogs(() => Assert.IsTrue(false));
    }
}

public static class AssertLogger
{
    public static void AssertWithLogs(Action assert)
    {
        try {
            assert();
        } catch (Exception ex) {
            //Use log4net or other loggers
            Console.WriteLine(ex.Message);
            throw ex;
        }
    }
} 

希望能帮助到你。


推荐阅读