我在Stackoverflow中看到了几个关于MOQ参数的问题,我的问题是如何填充这个参数:让代码:
[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
对象用于帖子回复,但_messageService.Process
负责填充response
对象。
在测试方法Should_Status_Be_Create_With_Valid_XML
中,我模拟_messageService.Process
和response
对象在Null reference
Request.CreateResponse(HttpStatusCode.Created, response.ToString());
response
为空!
答案 0 :(得分:1)
当然response
为null,没有任何代码可以将它设置为任何代码(在您的服务方法或模拟中)。
由于您正在模拟通常会填充它的方法,因此您指定它是如何设置的。您应该在调用Setup
之前填写对象,并将期望的作为调用该方法时的值。
另外,请参阅此question了解详情。