c# - 验证已执行的事件处理程序代码

标签 c# .net unit-testing .net-4.0 tdd

我有与此非常相似的代码,但不知道如何测试事件处理程序是否发生。

public class MyClass : MyAbstractClass
{ 
  IFileSystem FileSystem;

  public MyClass(IFileSystem myFileSys)
  {
    FileSystem = myFileSys;
    FileSystem.EventHit += new EventHandler(FileSystem_EventHit);
  }

  public void FileSystem_EventHit(object sender, EventArgs e)
  {
    //Testing base.OnOutput is not possible which I wont go into
    base.OnOutput("EventHit");
  }
}

测试代码在这里:

    [Test]
    public void DoSomething_WhenCalled_EventFired()
    {
         var mock = new Moq.Mock<IFileSystem>();

         MyClass plugin = new MyClass (mock.Object);

         mock.Object.DoSomething();

         mock.Raise(x => x.EventHit += null, new EventArgs());

        //Verify/Assert that MyClass handled and did something in the event handler

    }

最佳答案

我能想到的最简单的方法是在测试方法中添加您自己的处理程序,我认为这应该足够了吗?

[Test]
    public void DoSomething_WhenCalled_EventFired()
    {
         var mock = new Moq.Mock<IFileSystem>();
         bool isHit = false;

         mock.EventHit += (s, e) =>
         {
            isHit = true;
         };

         MyClass plugin = new MyClass (mock.Object);

         mock.Object.DoSomething();

         mock.Raise(x => x.EventHit += null, new EventArgs());

         Assert.IsTrue(isHit);

    }

关于c# - 验证已执行的事件处理程序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362045/

相关文章:

.net - 空的 catch 和 throw block 会做什么?

c# - 创建 WCF ChannelFactory<T>

unit-testing - Grails Spock单元测试查询

c++ - 解析 C++ 以生成单元测试 stub

c# - CompilationRelaxations.NoStringInterning 实际上是如何工作的?

c# - 如何只获取没有文件路径的文件名?

c# - .Net 配置部分中具有相同元素的集合

c# - 如何在 C# 中打开文件并更改其属性?

c# - 应用于通过反射创建的实例的显式转换运算符

Python unittest 模拟补丁对象不是方法