3
메시지 큐를 들여다 볼 때 호출되는 콜백 메소드를 유닛 테스트하고이를 수행하는 방법을 알 수 없습니다.유닛 테스트 peek이 완료되었을 때 사용되는 비동기 콜백 메소드
내 추상 클래스;
public abstract class QueueHandler : WindowsServiceBase
{
private readonly IMessageQueueWrapper _listeningQueue;
private PeekCompletedEventHandler _peekHandler;
protected QueueHandler(IMessageQueueWrapper listeningQueue)
: base()
{
_listeningQueue = listeningQueue;
}
protected override void ExecuteInternal()
{
_listeningQueue.BeginPeek();
}
protected override void ConfigureInternal()
{
if (_peekHandler != null) return;
_peekHandler = OnPeekCompleted;
_listeningQueue.PeekCompleted += OnPeekCompleted;
}
protected void OnPeekCompleted(object sender, PeekCompletedEventArgs e)
{
try
{
var msg = _listeningQueue.EndPeek(e.AsyncResult);
...
}
catch (Exception ex)
{
...
}
}
}
내 구체적인 클래스는 unittesting에 사용됩니다.
internal class QueueuHandlerImplementation : QueueHandler
{
public QueueuHandlerImplementation(IMessageQueueWrapper listeningQueue)
: base(listeningQueue)
{
}
}
내 단위 테스트; PeekCompletedEventArgs
는 기본 생성자를 가지고 있지 않기 때문에
public void OnPeekCompletedWhenBeginPeekShouldCallOnPeekCompleted()
{
QueueuHandlerImplementation queueHandler = new QueueuHandlerImplementation(_listeningQueueMock.Object);
//Arrange
queueHandler.Configure();
_listeningQueueMock.Setup(m => m.BeginPeek()).Raises(
m => m.PeekCompleted += null, new PeekCompletedEventArgs() { AsyncResult = new Mock<IAsyncResult>().Object});
//Act
_queueHandler.Execute();
//Assert
Assert.AreEqual(true, _queueHandler.IsConfigured);
}
이 불가능합니다.
public void OnPeekCompletedWhenBeginPeekShouldCallOnPeekCompleted()
{
QueueuHandlerImplementation queueHandler = new QueueuHandlerImplementation(_listeningQueueMock.Object);
//Arrange
queueHandler.Configure();
_listeningQueueMock.Setup(m => m.BeginPeek()).Raises(
m => m.PeekCompleted += null, PeekCompletedEventArgs.Empty);
//Act
_queueHandler.Execute();
//Assert
Assert.AreEqual(true, _queueHandler.IsConfigured);
}
이것은 좋은 보이지만 실행 호출 할 때 내가 유형의 개체라는 오류 얻을 " '경우 System.EventArgs는'System.Messaging.PeekCompletedEventArgs을 '형식으로 변환 할 수 없습니다."... 그리고 난 몰라 내가 멀리 얻을 수 있다면 어떤 AsyncResult 돌봐.
예, 물론 감사합니다. – Per