我有下面的代码,我试图用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实现时不会出现任何奇怪的错误。 –