Udostępnij za pośrednictwem


CCR tips and tricks - part 2

Apart from the utility mentioned in part one I use another utility to make sure my unit tests report failures in a good way. When using CCR in a MSTest process unhandled exceptions may be silently swallowed by the CCR framework unless you have a handler for that case. Before I started to use causalities to deal with unhandled exceptions I would only see a timeout failure but with today's utility you see a failure with the actual message instead (if used right). This implementation is intended to be used in a using statement since it raises any encountered errors when disposed. In future tips and tricks you'll see how it's used.

  1:     class CausalityForTests : IDisposable
 2:     {
 3:         private Exception exception = null;
 4:  
 5:         public CausalityForTests(DispatcherQueue dispatcherQueue)
 6:         {
 7:             Port<Exception> exceptionPort = new Port<Exception>();
 8:             Causality causality = new Causality(
 9:                 string.Format("CausalityForTests: {0}", Guid.NewGuid()), 
 10:                 exceptionPort);
 11:             Arbiter.Activate(
 12:                 dispatcherQueue, 
 13:                 exceptionPort.Receive(e => this.exception = e));
 14:             Dispatcher.AddCausality(causality);
 15:         }
 16:  
 17:         public void Dispose()
 18:         {
 19:             if (this.exception != null)
 20:             {
 21:                 throw this.exception;
 22:             }
 23:         }
 24:     }