Recently while writing unit tests for a device driver I came across a situation.
I had to simulate the call to the device to wait for sometime and then throw an error and then check if I handled it properly.
This helped.
This configures the Start method (which in real life issues command to the device and waits for response) to wait for 1 sec and then throw.
A.CallTo(fakeDevice). Where(x => x.Method.Name == "Start"). Invokes( x=> Thread.Sleep(1000)). Throws(new InvalidOperationException());