2012-09-30 6 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을 테스트 할 수 있습니다. 특정 조건이 충족 될 때 이벤트가 발생하는지 테스트해야합니다. 그렇지 않으면 이벤트가 발생하지 않아야합니다.

그것을 위해, 나는이 framewrok이 MSTEST, NUnit과, MSpec, xUnit의 같은 모든 테스트 엔진을 사용할 수있는 등, FluentAssertions (내 테스트에서 항상 를 사용하는 것이)이 프레임 워크를 사용

테스트는 다음과 같은 네임 스페이스를 사용할 필요가

[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 멋지다 –

관련 문제