public void GetState_should_return_status() { IPhoenixState state = new RaisingPhoenix(); Assert.AreEqual("wait to raise", state.GetState()); var wait = new AutoResetEvent(false); var wait2 = new AutoResetEvent(false); Func<Task<IPhoenixState>> action = () => { wait.WaitOne(); state = Substitute.For<IPhoenixState>(); state.GetState().Returns("some other state"); wait2.Set(); return Task.FromResult(state); }; state.Reborn(action); Assert.AreEqual("raising", state.GetState()); wait.Set(); wait2.WaitOne(); Assert.AreEqual("some other state", state.GetState()); }