0
中指定我在Rhino模拟的Do方法上遇到异常。InvalidOperationException:代理的返回值应该可以从
System.InvalidOperationException:委托返回值应该是 分配从MediaPlayerImpl.ScreenControl.ScreenCommunicatorState
我不是很清楚如何解决它。以下是我的代码。它相当简单易懂。
var mockCommunicator = Rhino.Mocks.MockRepository.GenerateStrictMock<IScreenCommunicator>();
ManualResetEvent screenTurnedOff = new ManualResetEvent(false);
mockCommunicator.Expect(c => c.TurnScreenOff(default(ScreenCommunicatorState))).IgnoreArguments()
.Do(new Action(() => screenTurnedOff.Set()));
public override ScreenCommunicatorState TurnScreenOn(ScreenCommunicatorState state)
{
state = state ?? new ScreenCommunicatorState { isScreenOn = false };
if (state.isScreenOn)
{
// Try and Get the screen power state
// ....
Task<byte[]> requestTask = SendRequest(CommandSequences.GetPowerStatus);
var isPowerOn = InterpretScreenPowerStatusMessage(requestTask);
if (isPowerOn.Value)
{
// Do nothing
}
else if (!isPowerOn.Value)
{
SendCommandSequence(CommandSequences.PowerOn);
}
else if (isPowerOn == null)
{
SendCommandSequence(CommandSequences.PowerOn);
}
// NO
}
state.isScreenOn = true;
Task<bool?> screenTurnedOnTask = IsScreenTurnedOn();
Func<Task<bool?>, Task> doSomeWork = TurnScreenOnAndRectifyScreenInputSource;
Task<Task> turnScreenOnIfNecessaryTask = screenTurnedOnTask.ContinueWith(doSomeWork, TaskContinuationOptions.NotOnFaulted);
Task unwrapped = turnScreenOnIfNecessaryTask.Unwrap();
try
{
unwrapped.Wait(); // This will thrown an exception if it's faulted, which is what we want
}
catch (AggregateException aggregateException)
{
if (aggregateException.InnerExceptions.Count() == 1)
{
throw aggregateException.InnerExceptions[0];
}
else
{
throw;
}
}
return state;
}
你可以发布整个错误,标题截断。 –
您的期望似乎没有提供.Return(...)电话。 IScreenCommunicator.turnScreenOff方法声明是什么样的? –