c# - 如何一般地处理测试断言
问题描述
我想在单元测试时记录所有断言,而不会过多地侵入代码。理想情况下,我想要一种方法来挂钩任何测试断言,如 Assert.IsTrue,如果它失败,则将断言和消息记录到我的应用程序日志中(使用 log4net)。
日志记录在并行测试场景中特别有用。除非我对每个测试都使用 try catch throw,否则我看不到这样做的方法 - 太多的代码膨胀?
相信很多人都有类似的需求。我正在使用最新的 Visual Studio 17 和 Resharper MSTestV2 测试框架和适配器 v1.4.0。有任何想法吗?我错过了显而易见的事情吗?
提前致谢亲切的问候特里
解决方案
可能有一些库可以使用开箱即用的记录器进行断言,但是如果您只想自己做,而不是为每个测试编写 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;
}
}
}
希望能帮助到你。
推荐阅读
- flutter - 使用 MockClient 时获取 null
- javascript - 如何正确定义一个id?
- python - 如何使用 Dask read_csv 读取每 n 行以快速读取多个文件?
- python - pd.to_datetime() 与西班牙语言环境系统
- python - 为什么 Web3.py 交易功能不起作用?
- c# - 如何通过 IIS 使用打印机
- python - 如何在 Python 中使用 GUI Tkinter 以特定格式显示来自数据库 sqlite3 的信息?
- php - GitLab CI/CD - 学说/dbal 和 laminas/laminas-code PHP 版本问题
- authorize.net - 为 Dotnet Core 授权.Net SDK
- python - How to create this type of relationship using Django Models