public class RequestSenderMock : IRequestSender { public void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState) { var result = new Mock(); result.Setup(x => x.AsyncState).Returns(requestState); internalCallback(result.Object); } }
public class RequestSenderHelpers { public static void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState) { var result = new Mock(); result.Setup(x => x.AsyncState).Returns(requestState); internalCallback(result.Object); } } [Test] public void Callback_VerifyingWithMethodImplementation_VerifyWorks() { // arrange var sender = new Mock(); sender.Setup(s => s.Send(It.IsAny(), It.IsAny(), It.IsAny
为了避免冗长的设置,您可以在扩展方法中包装方法的设置并相应地更改测试:
public static class RequestSenderHelpers { public static void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState) { var result = new Mock(); result.Setup(x => x.AsyncState).Returns(requestState); internalCallback(result.Object); } public static void SetupSendWithMockedAsyncResult(this Mock sender) { sender.Setup(s => s.Send(It.IsAny(), It.IsAny(), It.IsAny())).Callback(Send); } } [Test] public void Callback_VerifyingWithMethodImplementation_VerifyWorks() { // arrange var sender = new Mock(); sender.SetupSendWithMockedAsyncResult(); // act sender.Object.Send(null, delegate {}, null); // assert sender.Verify(s => s.Send(It.IsAny(), It.IsAny(), It.IsAny())); }