首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的单元测试应该如何处理模拟Windows EventLog?

我的单元测试应该如何处理模拟Windows EventLog?
EN

Stack Overflow用户
提问于 2022-04-06 13:09:21
回答 1查看 176关注 0票数 1

我正在为一个组件编写单元测试,该组件利用对Windows事件日志的读写功能,如果我的目标是移除外部依赖项(读取和写入实际事件日志),我很难了解如何最好地模拟这个问题。

该组件使用EventLogWatcher订阅事件,以便在将特定事件发布到事件日志时引发事件EventRecordWritten,而我的ReadEventLog()委托函数处理与新发布事件相关的逻辑。

在这个单元测试中,我的目标是最终测试ReadEventLog()的功能,但我不知道如何亲自引发EventRecordWritten事件,以便调用ReadEventLog()

我正在寻找关于如何正确地为事件日志编写单元测试的任何建议,这样我就不会真正地写入事件日志,而是仍然以某种方式使用我现有的ReadEventLog()委托函数(因为这是我需要测试的逻辑)。

EN

回答 1

Stack Overflow用户

发布于 2022-04-06 13:40:48

由于EventLogWatcher不实现接口(IDisposable除外),所以您应该在它周围声明一个包装类,该类实现IEventLogWatcher成员和事件:

代码语言:javascript
复制
   public interface IEventLogWatcher
   {
      bool Enabled { get; set; }
      event EventHandler<EventRecordWrittenEventArgs> EventRecordWritten;
   }

   public class EventLogWatcherWrapper : IEventLogWatcher
   {
      private EventLogWatcher eventLogWatcher { get; set; }

      public bool Enabled
      {
         get => eventLogWatcher.Enabled;
         set => eventLogWatcher.Enabled = value;
      }

      public EventLogWatcherWrapper(string path)
      {
         eventLogWatcher = new EventLogWatcher(path);
      }

      public EventLogWatcherWrapper(EventLogQuery eventQuery, EventBookmark bookmark)
      {
         eventLogWatcher = new EventLogWatcher(eventQuery, bookmark);
      }
      public EventLogWatcherWrapper(EventLogQuery eventQuery, EventBookmark bookmark, bool readExistingEvents)
      {
         eventLogWatcher = new EventLogWatcher(eventQuery, bookmark, readExistingEvents);
      }

      event EventHandler<EventRecordWrittenEventArgs> IEventLogWatcher.EventRecordWritten
      {
         add { eventLogWatcher.EventRecordWritten += value; }
         remove { eventLogWatcher.EventRecordWritten -= value; }
      }
   }

现在,您可以在类中将EventLogWatcher属性定义为IEventLogWatcher,并在单元测试时传递mockEventLogWatcher对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71767359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档