【发布时间】:2014-07-16 15:19:41
【问题描述】:
我正在查看 SignalR 的 unit tests 并注意到其中一个测试使用 Moq 创建模拟 HubConnection:
[Fact]
public void HubCallbackClearedOnFailedInvocation()
{
var connection = new Mock<HubConnection>("http://foo");
var tcs = new TaskCompletionSource<object>();
tcs.TrySetCanceled();
connection.Setup(c => c.Send(It.IsAny<string>())).Returns(tcs.Task);
var hubProxy = new HubProxy(connection.Object, "foo");
var aggEx = Assert.Throws<AggregateException>(() => { hubProxy.Invoke("foo", "arg1").Wait(); });
var ex = aggEx.Unwrap();
Assert.IsType(typeof(TaskCanceledException), ex);
Assert.Equal(connection.Object._callbacks.Count, 0);
}
但是,当我尝试使用稍微不同的模拟框架 RhinoMocks 执行相同操作时,它抱怨该方法不是虚拟的:
[Test]
public void ShouldCreateBrokerWithHubConnection()
{
//Arrange
var url = "http://localhost6790";
var hubProxy = MockRepository.GenerateMock<IHubProxy>();
var hubConnection = MockRepository.GenerateMock<HubConnection>(url);
hubConnection.(c => c.CreateHubProxy("ArtemisClientHub")).Return(hubProxy);
... (more code)
}
System.InvalidOperationException : Invalid call, the last call has been used or no call has been made (make sure that you are calling a virtual (C#) / Overridable (VB) method).
与 Moq 等较新的库相比,这只是 RhinoMocks 的一个缺点吗?
【问题讨论】:
-
啊,我认为问题在于
Send确实是可以覆盖的。而CreateHubProxy不是。我只是在比较苹果和橙子。
标签: c# unit-testing signalr moq rhino-mocks