我有下面的代碼,我試圖用NUnit和Rhino mocks來測試。如何測試涉及SynchronizationContext的代碼?
void _tracker_IndexChanged(object sender, IndexTrackerChangedEventArgs e)
{
// _context is initialised as
// SynchronizationContext _context = SynchronizationContext.Current;
// _tracker.Index is stubbed to return the value 100
_context.Post(o => _view.SetTrackbarValue(_tracker.Index), null);
}
在測試用例我已經設置了期望爲
_view.Expect(v => v.SetTrackbarValue(100));
,當我確認期望,單元測試與消息randomaly失敗
Test(s) failed. Rhino.Mocks.Exceptions.ExpectationViolationException :
IIndexTrackerView.SetTrackbarValue(100); Expected #1, Actual #0.
我沒有在這裏找到問題,如何我是否修復它?
+1,但確實要確保調用了_view.SetTrackbarValue! –
@Prashant:那麼我肯定會把「上下文」類剔除,而不是嘲笑它。讓它直接調用傳遞給它的委託。在你的單元測試中,在視圖上而不是在上下文類中設置你的期望值。將此測試與幾個簡單的基於UI的集成測試相結合,以確保在替換真正的SynchronizationContext實現時不會出現任何奇怪的錯誤。 –