TDD를 사용하고 있으며 PubSubEvent에서 사용할 수있는 Unsubscribe() 메소드에 대한 단위 테스트를 작성하려고합니다. 인터페이스가없는 상위 클래스로부터 상속받을 인터페이스가 없으므로 테스트 방법을 모르겠습니다.Prism TDD Unsubscribe()
내 서비스와 방법, 나는 시험에 싶습니다
public class FrameService: IFrameService
{
private readonly IEventAggregator _eventAggregator;
public void UnsubscribeEvents()
{
_eventAgregator.GetEvent<FrameAddedEvent>()
.Unsubscribe(FrameAddedEventHandler); // How to unit test this?
}
}
FrameAddedEvent 클래스, 프리즘 라이브러리에서 PubSubEvent에서 상속 : 프리즘의 라이브러리에
public class FrameAddedEvent: PubSubEvent<Frame>
{
}
선언 :
public class PubSubEvent<TPayload> : EventBase
{
public SubscriptionToken Subscribe(Action<TPayload> action);
}
코드 줄의 첫 번째 부분에 대한 내 테스트 (MSTest 및 Moq 사용). 나는 구독 취소 (에 어설)와 지금 다른 유닛 테스트가 필요
[TestClass]
public class FrameServiceTest
{
private Mock<IEventAgregator> _eventAgregator;
[TestMethod]
public void When_SubscribeEvents_Then_Get_FrameAddedEvent_From_EventAggregator()
{
var frameAddedEvent = new FrameAddedEvent();
_eventAgregator.Setup(x=>x.GetEvent<FrameAddedEvent>())
.Returns(frameAddedEvent);
_frameService.SubscribeEvents();
_serviceLayerEventAgregator.Verify(x => x.GetEvent<FrameAddedEvent>(), Times.Once);
}
}
답변 : 난 그냥 나와 같은 문제가있을 수 있습니다 사람들을위한 코드를 추가 해요, 설명을 위해 아래에 의견을 참조하십시오 .
가짜 클래스 :
public class FakeFrameAddedEvent : FrameAddedEvent
{
public bool Unsubscribed { get; private set; }
public FakeFrameAddedEvent()
{
Unsubscribed = false;
}
public override void Unsubscribe(Action<Frame> subscriber)
{
Unsubscribed = true;
}
}
그리고 새로운 유닛 테스트 : 모든
[TestMethod]
public void When_UnsubscribeEvents_Then_Unsubscribe_Is_Call()
{
var frameAddedEvent = new FakeFrameAddedEvent();
_serviceLayerEventAgregator.Setup(x => x.GetEvent<FrameAddedEvent>())
.Returns(frameAddedEvent);
_frameService.UnsubscribeEvents();
Check.That(frameAddedEvent.Unsubscribed).IsTrue();
}
답장을 보내 주셔서 감사합니다. 이것이 프리즘 기능임을 이해합니다. Unsubscribe() 메서드 자체를 테스트하고 싶지 않지만이 메서드가 호출되는지 확인해야합니다. 코드가 제대로 작동하는지 확인하는 유일한 방법입니다. –
나는 당신이 나에게 링크로 준 예제를 사용했다. 방금 가짜 수업을 만들었습니다. Unsubcribe() 메서드를 재정 의하여 bool을 설정하고 bool이 테스트 마지막에 올바른 값을 가지는지 확인합니다. 내 질문을 코드로 편집합니다. –