2016-06-27 5 views
1

내가 유효한 클래스를 만들 수 아니에요 쉽게 테스트 장치를 만들상속 내가 System.Timers.ElapsedEventArgs에서 상속 할 때

단위 테스트를 위해 Timer의 경과 이벤트를 호출 할 때 내가 파생하는 클래스의 인스턴스를 만들고이를 인수로 전달할 수 있기를 원하기 때문에이 작업을 수행하려고합니다.

테스트를 돕기 위해 공용 메서드를 사용하여 호출 할 수있는 클래스의 속성과 다른 이벤트를 사용하여 간접 계층을 만들었습니다. 나는 이것이 지금 당장 올바른 일이 아니라는 것을 알고 있습니다. 그러나 나는 그 시스템이 작동하는지 시험해보고 싶습니다. 그리고 나는 그것들을 시스템 시계/타이머로 대체 할 방법을 찾아 낼 것입니다.

속성으로 새 이벤트 :

public event System.Timers.ElapsedEventHandler PerformEvent; 

체인 연결된 이벤트. 이 방법이 경과 한 경우 시간 화재 또는 내 자신에 그것을 호출 할 수 있습니다 : 나는 그것을 호출의 공개 방법을 만들려고하고 위로 할 수있는 새로운 아닌 ElapsedEventArgs있어

this.m_timer.Elapsed += this.PerformEvent; 

.

public void FireEvent() 
    { 
     object o = new object(); 
     this.PerformEvent.Invoke(o, objectIWantToBeElapsedEventArgs) 
    } 

1 : http://referencesource.microsoft.com/#System/services/timers/system/timers/ElapsedEventArgs.cs,fa59a445f56b7851

internal ElapsedEventArgs(int low, int high) {   
     long fileTime = (long)((((ulong)high) << 32) | (((ulong)low) & 0xffffffff)); 
     this.signalTime = DateTime.FromFileTime(fileTime);       
    } 

답변

0

당신이 내부 생성자를 호출하는 typemock 아이솔레이터를 사용하여 그것을 할 수있는 새로운 ElapsedEventArgs를 작성해야하는 경우, 나는 당신의 예제와 테스트를 만들었습니다

[TestMethod, Isolated] 
public void InvokeEvent_willChangeWasCalledToTrue() 
{ 
    var p = new Program(); 
    bool wasCalled = false; 
    p.PerformEvent += (s, e) => { wasCalled = true; }; 

    var args = Isolate.NonPublic.CreateInstance<ElapsedEventArgs>(0, 2); 

    Isolate.Invoke.Event(() => p.PerformEvent += null, null, args); 

    Assert.IsTrue(wasCalled); 
} 

에서 자세한 내용을 볼 수 있습니다.