2012-09-30 37 views

回答

4

我测试赛的方式如下:

假设这是你的对象:

public class MyEventRaiser 
{ 
    public event EventHandler<string> MyEvent = delegate { }; 

    public void Process(string data) 
    { 
     // do something interestuing 

     Thread.Sleep(2000); 

     if (!string.IsNullOrEmpty(data)) 
     { 
      this.MyEvent(this, data + " at: " + DateTime.Now.ToString()); 
     } 
    } 
} 

因此你的主题下测试是:MyEventRaiser,你要测试的方法Process。您需要测试在满足特定条件时引发的事件,否则不应提升事件。

要做到这一点,我用这个框架(我用在我的测试总是)FluentAssertions,这framewrok可以与任何测试引擎像MSTest的,NUnit的,MSpec,的xUnit使用等

测试看起来像:

[TestClass] 
public class CustomEventsTests 
{ 
    [TestMethod] 
    public void my_event_should_be_raised() 
    { 
     var sut = new MyEventRaiser(); 

     sut.MonitorEvents(); 

     sut.Process("Hello"); 

     sut.ShouldRaise("MyEvent").WithSender(sut); 
    } 

    [TestMethod] 
    public void my_event_should_not_be_raised() 
    { 
     var sut = new MyEventRaiser(); 

     sut.MonitorEvents(); 

     sut.Process(null); 

     sut.ShouldNotRaise("MyEvent"); 
    } 
} 

您需要使用下面的命名空间:

using FluentAssertions; 
using FluentAssertions.EventMonitoring; 
+0

感谢,FluentAssertions很酷 –

相关问题