如何一般性地处理测试断言

时间:2019-01-16 07:12:20

标签: c# unit-testing visual-studio-2017 mstest

我想在进行单元测试时记录所有断言,而又不会过于侵入代码。 理想情况下,我希望有一种方法可以挂接任何类似Assert.IsTrue的测试断言,如果失败,则将该断言和消息记录到我的应用程序日志中(使用log4net)。

日志记录在并行测试方案中特别有用。除非我为每个测试都使用try catch抛出异常,否则我看不到这样做的方法-代码过多吗?

我确信很多人也有类似的要求。 我正在使用最新的Visual Studio 17和Resharper MSTestV2测试框架和适配器v1.4.0。 有任何想法吗?我想念明显的东西吗?

预先感谢 亲切的问候 特里

1 个答案:

答案 0 :(得分:0)

可能有一些库可以直接使用记录器进行断言,但是如果您只是想自己做,则可以使用将操作接受为参数。此操作可以接受任何断言方法。

类似这样的东西:

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

希望有帮助。