我在我自己的IDispatcher界面包調度程序,然後使用起訂量來驗證調用它完成了這個製作。
IDispatcher接口:
public interface IDispatcher
{
void BeginInvoke(Delegate action, params object[] args);
}
真實調度實現:
class RealDispatcher : IDispatcher
{
private readonly Dispatcher _dispatcher;
public RealDispatcher(Dispatcher dispatcher)
{
_dispatcher = dispatcher;
}
public void BeginInvoke(Delegate method, params object[] args)
{
_dispatcher.BeginInvoke(method, args);
}
}
在類初始化調度下測試:
public ClassUnderTest(IDispatcher dispatcher = null)
{
_dispatcher = dispatcher ?? new UiDispatcher(Application.Current?.Dispatcher);
}
嘲笑裏面的單元測試調度員(在這種情況下,我的事件處理程序是OnMyEventHandler並接受一個單一的布爾參數ca lled myBoolParameter)
[Test]
public void When_DoSomething_Then_InvokeMyEventHandler()
{
var dispatcher = new Mock<IDispatcher>();
ClassUnderTest classUnderTest = new ClassUnderTest(dispatcher.Object);
Action<bool> OnMyEventHanlder = delegate (bool myBoolParameter) { };
classUnderTest.OnMyEvent += OnMyEventHanlder;
classUnderTest.DoSomething();
//verify that OnMyEventHandler is invoked with 'false' argument passed in
dispatcher.Verify(p => p.BeginInvoke(OnMyEventHanlder, false), Times.Once);
}
您收到什麼錯誤? – 2009-07-09 23:19:50
我沒有得到任何錯誤。正是在Dispatcher上傳遞給BeginInvoke的內容永遠不會運行。 – 2009-07-10 20:27:01
我會誠實地說,我沒有必須單元測試一個利用調度器的視圖模型。是否有可能調度員沒有運行。在你的測試中調用Dispatcher.CurrentDispatcher.Run()會有幫助嗎?我很好奇,所以發佈結果,如果你得到它們。 – 2009-07-30 03:32:32