Recently I had to test a class which heavily depended upon a SynchronizationContext.  This threw me off for about half an hour as I didn't want to write multi-threaded unit tests.  Multi-threaded code is difficult enough without adding needless threads. 

The solution I came up with is simple and gives the unit test a large degree of control over the execution of posted delegates.  The resulting tests were much easier to code and understand.

public sealed class TestSynchronizationContext : SynchronizationContext {
    private List<Tuple<SendOrPostCallback, object>> m_pending 
        = new List<Tuple<SendOrPostCallback, object>>();

    public override void Send(SendOrPostCallback d, object state) {

    public override void Post(SendOrPostCallback d, object state) {
        m_pending.Add(Tuple.Create(d, state));

    public void RunAllPosted() {
        m_pending.ForEach(x => x.First(x.Second));