单元测试 - 如何测试仅插入日志消息的“void”方法(Serilog)

2024-02-25

我需要测试类型的方法void,它只是使用 LOG 框架在我的 LOG 变量上插入一条消息(Serilog https://serilog.net/).

参见实现示例:

public class MyClass
{
    public MyClass(ILogger<IProcess> logger)
    {
        this.logger = logger;
    }

    private readonly ILogger logger;

    //...Anothers methods...

    public void LogInit(Guid processId, string folder, string[] args)
    {
        var myObject = new
        {
            ProcessId = processId,
            Folder = folder,
            Arguments = args
        };

        this.logger.LogWarning("{@myObject}", myObject);
    }
}

在这种情况下,我们需要创建一个测试LogInit (...)

这个方法真的需要测试吗?或者更确切地说,它的存在有意义吗?

我正在读一些关于:

“如果你的方法没有副作用,并且不返回任何内容,那么它就没有做任何事情。”

在这种情况下,该方法只是“单独”创建,以维护代码的组织并进一步分离类的职责。

这就说得通了?

EDIT:@彼得邦斯

我们无权访问接口中注册的消息(logger), 喜欢:this.logger.GiveMeWarningLogs()...


如果您使用 Serilog,则可以使用测试相关器接收器 https://github.com/MitchBodmer/serilog-sinks-testcorrelator查看方法调用产生了哪些日志事件。

[TestMethod]
public void A_test()
{
    var myClass = new MyClass(new LoggerConfiguration().WriteTo.TestCorrelator().CreateLogger());

    using (TestCorrelator.CreateContext())
    {
        myClass.LogInit();

        TestCorrelator.GetLogEventsFromCurrentContext()
            .Should().ContainSingle()
            .Which.MessageTemplate.Text
            .Should().Be("{@myObject}");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试 - 如何测试仅插入日志消息的“void”方法(Serilog) 的相关文章

随机推荐

  • IL 中的 if 是什么样的?

    一个是什么意思if语句编译成 IL 后是什么样子 这是 C 中非常简单的构造 有人能给我一个更抽象的定义吗 这里有一些if语句以及它们如何转换为 IL ldc i4 s 0x2f var i 47 stloc 0 ldloc 0 if i
  • 如何将录制的视频保存到相册中?

    以下代码是将相机拍摄的图像保存到相册中 if mediaType isEqualToString NSString kUTTypeImage image info objectForKey UIImagePickerControllerEd
  • 为什么 Kotlin lang 只允许项目中只有一个 main 函数?

    这是否剥夺了 java 中具有多个主入口点的特性 这些入口点可以在需要时调用 UPDATE Kotlin 的最新版本允许多个main即使在同一个包中也可以运行 如果它们位于不同的文件中 项目中可以有多个主函数 但每个主函数只能有一个pack
  • 纯 CSS 使字体大小根据动态字符数量进行响应

    我知道用 Javascript 可以很容易地解决这个问题 但我只对纯 CSS 解决方案感兴趣 我想要一种动态调整文本大小的方法 以便它始终适合固定的 div 这是示例标记 div style width 200px height 1em p
  • JavaScript 跨浏览器:将字符串视为数组是否安全?

    这段代码在所有主流浏览器中都安全吗 var string 123 alert string 1 2 should alert true 不 这不安全 Internet Explorer 7 不支持按索引访问字符串 你必须使用charAt兼容
  • 如何在 swiftui 中添加自定义圆形滑动操作?

    在我的 SwiftUI 应用程序中 我想在 ListView 中设计圆形滑动操作 如以下示例所示 天气应用程序 iOS 15 我知道您可以添加这样的自定义操作 List Text Pepperoni pizza swipeActions B
  • PHP 或 MySQL 中的业务逻辑?

    在具有合理流量的网站上 如果将应用程序 业务逻辑编写为存储过程 触发器和视图 而不是编写在 PHP 代码本身中 这会重要吗 牢记可扩展性的最佳方法是什么 我无法向您提供统计数据 但除非您计划将来将 PHP 更改为另一种语言 否则我可以说将业
  • 使用 graph api 2.2 从 android 中的 facebook sdk 4.0.1 获取好友列表

    我在进行一些搜索后用于获取列表的代码如下 GraphRequestBatch batch new GraphRequestBatch GraphRequest newMyFriendsRequest accessToken new Grap
  • pg_dump 忽略表顺序?

    我最近一直在玩 PostgreSQL 并且无法理解如何备份和恢复单个表 我使用 pgadmin3 备份数据库中的单个表 以便将其复制到不同的服务器 当我尝试对文件执行 pg restore 时 收到错误消息 指出该序列不存在 pg rest
  • XmlHttpRequest.onload 未调用

    我正在玩这个XmlHttpRequest事物 在一些教程和书籍中 它是onload请求完成时调用的函数 在我的小实验中 这个函数从未被调用 这是我的代码 window onload function var url http www goo
  • 渐变剪切似乎在“无”上窒息

    我正在尝试向我的图表添加渐变裁剪 我使用了这里推荐的方法 如何在tensorflow中有效应用梯度裁剪 https stackoverflow com questions 36498127 how to effectively apply
  • Django 官方教程第 1 部分:运行时错误:cmp 中超出最大递归深度

    根据 django 教程 我创建了项目并执行了manage py runserver 如教程中所述 并且我收到错误 RuntimeError cmp 中超出了最大递归深度 有什么办法可以纠正这个问题吗 我得到这个错误 Validating
  • GoLang - 内存分配 - []byte 与 string

    在下面的代码中 c fool d byte fool fmt Printf c T d n c unsafe Sizeof c 16 bytes fmt Printf d T d n d unsafe Sizeof d 24 bytes 为
  • 非被动滚动事件处理程序的控制台警告

    当我使用 bootstrap vue 中的 Form Select 时 出现此控制台错误 我正在使用谷歌浏览器 违规 向滚动阻塞 鼠标滚轮 事件添加了非被动事件侦听器 考虑将事件处理程序标记为 被动 以使页面响应更快 我使用 axios 从
  • indexpath.row 从 1 而不是 0 开始

    我面临着 uitableview 的问题 有时 当我的表的 datasource numberofrowsinsection 有 3 个值时 cellforowatindexpath 从 0 1 而不是 0 0 开始 有人可以帮我找出发生此
  • 在 Swing 中使图像按钮看起来被按下/单击

    我创建了一个 JButton 其中有一个图像设置为代表该按钮的图标 现在 我已经设置了 setContentAreaFilled false setBorderPainted false setOpaque false 这些属性使图像按钮看
  • 多行字符串文字的语法突出显示

    我有一种自定义语言 我想在 Visual Studio Code 中为其提供语法突出显示 在这种语言中 字符串文字以双引号或单引号开头和结尾 以双引号开头的字符串文字可以包含单引号 反之亦然 不会发生任何其他引号转义 但无论起始引号类型如何
  • 将菜单项添加到 Quickbooks

    是否可以使用 QBSDK 将菜单项添加到 Quickbooks 我发现了一些我无法工作的旧例子 我已经为我的公司创建了一个自定义应用程序 并尝试通过在 Quickbooks 中创建一个菜单项来简化它 任何帮助将不胜感激 这是我到目前为止所尝
  • 替换嵌套括号中的内容

    Input ABCDEF 3 abcdef GHIJKLMN 4 5 Value OPQRSTUVW 4 5 Value 3 预期输出 ABCDEF GHIJKLMN OPQRSTUVW 到目前为止尝试过 Output Input repl
  • 单元测试 - 如何测试仅插入日志消息的“void”方法(Serilog)

    我需要测试类型的方法void 它只是使用 LOG 框架在我的 LOG 变量上插入一条消息 Serilog https serilog net 参见实现示例 public class MyClass public MyClass ILogge