WPF 응용 프로그램의 UI와 비동기 메시징 시스템의 UI 사이에있는 C# 클래스를 작성했습니다. 나는 이제이 클래스에 대한 단위 테스트를 작성하고 운영자와 관련된 문제에 직면하고 있습니다. 다음 메서드는 테스트 할 클래스에 속하며 구독 처리자를 만듭니다. 그래서 나는 Unit Test - Test Method에서이 Set_Listing_Records_ResponseHandler
메서드를 호출하려고합니다.멀티 스레드 WPF 응용 프로그램에서 사용되는 클래스 테스트 유닛
public async Task<bool> Set_Listing_Records_ResponseHandler(
string responseChannelSuffix,
Action<List<AIDataSetListItem>> successHandler,
Action<Exception> errorHandler)
{
// Subscribe to Query Response Channel and Wire up Handler for Query Response
await this.ConnectAsync();
return await this.SubscribeTo_QueryResponseChannelAsync(responseChannelSuffix, new FayeMessageHandler(delegate (FayeClient client, FayeMessage message) {
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
try
{
...
}
catch (Exception e)
{
...
}
}));
}));
}
실행 흐름은 Application.Current.Dispatcher .... 라인에 다시 온다하지만 그때 오류가 발생합니다 :
Object reference not set to an instance of an object.
내가 Application.Current
가 null 인 것을 알 수 있습니다 디버깅 할 때.
유닛 테스트 - 테스트 메소드에서 디스패처를 사용하는 몇 가지 예가 있었는데이 중 일부를 시도했지만 오류를 방지했지만 디스패처의 코드는 실행되지 않습니다. .
테스트 메소드가 호출하는 메소드에 사용 된 Dispatcher가있는 예제를 찾을 수 없었습니다.
저는 Windows 10 컴퓨터에서 .NET 4.5.2로 작업하고 있습니다.
도움을 주시면 감사하겠습니다.
감사합니다.
자세한 설명이 필요하면 여기에 제공된 대답을 살펴보고 알려주십시오. http://stackoverflow.com/a/38994745/5233410 – Nkosi
수업을 단위 테스트 할 수있게하려면 일반 의존성 주입 (DI)이라고 불리는 것에 관련된 좋은 사례. 이 경우 WPF 관련 클래스 (Dispatcher)를 사용하면 안됩니다. 특히 _static_ class WPF 응용 프로그램을 통해 _ 특히 _ 사용해야합니다. 대신, Dispatcher를 종속으로 처리하고 Dispatcher 자체가 아닌 클래스에 주입하십시오. 그러나 필요한 메소드를 제공하는 일부 인터페이스. 이러한 인터페이스를 작성하고 구현하고 WPF Dispatcher를 랩핑해야합니다. 그런 다음 단위 테스트에서이 IDispatcher의 비 WPF 구현을 제공합니다. – Evk