我在这里看到了关于MOQ中的out参数的几个问题,我的问题是如何填充这个参数:让我们编写代码:
[HttpPost]
public HttpResponseMessage Send(SmsMoRequest sms)
{
if (sms == null)
return Request.CreateResponse(HttpStatusCode.BadRequest);
SmsMoResponse response;
_messageService.Process(sms, out response);
return Request.CreateResponse(HttpStatusCode.Created, response.ToString());
}我想测试这篇文章:
[Test]
public void Should_Status_Be_Create_With_Valid_XML()
{
// Arrange
var messageServiceMoq = new Mock<IMessageService>();
SmsMoResponse response;
messageServiceMoq.Setup(mock => mock.Process(It.IsNotNull<SmsMoRequest>(), out response));
_kernel.Bind<IMessageService>().ToConstant(messageServiceMoq.Object);
var client = new HttpClient(_httpServer) { BaseAddress = new Uri(Url) };
// Act
using (var response = client.PostAsync(string.Format("Api/Messages/Send"), ValidContent()).Result)
{
// Asserts
response.IsSuccessStatusCode.Should().BeTrue();
response.StatusCode.Should().Be(HttpStatusCode.Created);
}
}问题
发送方法( post )中的response对象用于post响应,但_messageService.Process负责填充response对象。在测试方法Should_Status_Be_Create_With_Valid_XML中,我模拟_messageService.Process,而response对象不填充Request.CreateResponse(HttpStatusCode.Created, response.ToString());中的ocorr错误Null reference
response为空!
发布于 2014-08-08 15:16:30
当然,response是空的,没有任何代码可以将它设置为任何东西(在您的服务方法或模拟中)。
由于您是在模拟通常会填充它的方法,所以应该由您来指定如何设置它。在调用Setup之前,您应该使用调用该方法时所期望的值来填充该对象。
另外,请参阅此question以获得更多信息。
https://stackoverflow.com/questions/25206450
复制相似问题