首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟EventLog和EventLogEntry

模拟EventLog和EventLogEntry
EN

Stack Overflow用户
提问于 2010-07-30 23:24:46
回答 3查看 3.9K关注 0票数 5

我正在尝试为一个报告EventLog中条目的应用程序编写单元测试。现在,当我运行单元测试时,我必须创建一个临时EventLog,向其中写入条目,并在完成后删除日志。我这样做是因为我需要取回EventLogEntry对象,该对象没有构造函数。

我的问题是,有没有办法通过模拟EventLog来恢复EventLogEntries。在我看来,必须向实际的EventLog中写入条目更像是集成测试,而不是单元测试。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-31 03:40:38

您说得对,这更像是一次集成测试。然而,您需要问问自己,您在这里真正想要测试的是什么。如果它真的是一个单元测试,并且您只想在EventLogEntries上测试逻辑,那么您应该像对待任何其他外部依赖项一样对待事件日志。

TDD让我走上了隔离和嘲笑许多让人觉得奇怪的东西的道路,但最终却把我从维护的噩梦中拯救出来。即文件IO、日志记录、跟踪等...

我会将所有CRUD操作都粘贴到接口边界后面的事件日志中,并将其视为数据访问。如果您不能轻松地在带外创建EventLogEntries,那么您甚至可以考虑创建您自己的实体来表示事件日志中的条目并使用它们。

票数 1
EN

Stack Overflow用户

发布于 2010-08-02 02:07:06

这类似于我今天刚刚回答的另一个问题-- How do I unit-test saving file to the disk?

唯一的区别是-您的依赖项是EventLog和相关类。让我们假设您只需要记录一些具有严重程度的文本。

代码语言:javascript
复制
struct Event 
{ 
  public string Description {get; set;} 
  public Severity Severity {get; set;}
}

interface Logger
{
  void WriteEvent(Event e);
  void IEnumerable<Event> GetEvents();
}

现在,由于EventLog是一个.Net类,您不能强制将其转换为Logger接口,因此您需要一个适配器

代码语言:javascript
复制
public EventLogAdapter : Logger {
 //delegates to .Net framework's EventLog  
 // Also EventLogEntry is internal to this class - entries will be mapped to Event structs
}

现在我们需要的是测试..。像UIA或123一样简单

依赖于记录器的类的

  • 单元测试将使用模拟。
  • 写入集成测试以验证EventLogAdapter EventLog
  • 是否确实写入和读取内容
  • 写入至少一项验收测试,以验证导致某些日志记录的端到端方案,即验证EventLogAdapter是否正确插入。
票数 4
EN

Stack Overflow用户

发布于 2010-07-31 03:56:49

这就是接口真正有用的地方。让你的类依赖于IEventLog而不是EventLog。然后,在您的测试中,您可以模拟IEventLog,并验证您期望在IEventLog上调用的方法确实得到了调用。

如果你想在你的类中插入一个记录器来捕获所有东西(class EventLogRecorder : IEventLog),你也可以这样做……做任何你需要做的事。

松散耦合是你想要达到的目标……

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

https://stackoverflow.com/questions/3372940

复制
相关文章

相似问题

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