Unit testing 如何模拟Moq中没有参数的melthod并填写
我在Stackoverflow中看到了几个关于MOQ中out参数的问题,我的问题是如何填写此参数:让我们来编码:Unit testing 如何模拟Moq中没有参数的melthod并填写,unit-testing,nunit,moq,Unit Testing,Nunit,Moq,我在Stackoverflow中看到了几个关于MOQ中out参数的问题,我的问题是如何填写此参数:让我们来编码: [HttpPost] public HttpResponseMessage Send(SmsMoRequest sms) { if (sms == null) return Request.CreateResponse(HttpStatusCode.BadRequest); SmsMoResponse response; _messageSe
[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);
}
}
[测试]
public void应该是\u Status\u\u Create\u With\u Valid\u XML()
{
//安排
var messageServiceMoq=new Mock();
SMSMO反应;
messageServiceMoq.Setup(mock=>mock.Process(It.IsNotNull(),out response));
_kernel.Bind().ToConstant(messageServiceMoq.Object);
var client=newhttpclient(httpServer){BaseAddress=newuri(Url)};
//表演
使用(var response=client.PostAsync(string.Format(“Api/Messages/Send”),ValidContent()).Result)
{
//断言
response.issucessStatusCode.Should().BeTrue();
response.StatusCode.Should().Be(HttpStatusCode.Created);
}
}
问题
发送方法(POST)中的Myresponse
对象用于POST响应,但\u messageService.Process
负责填充响应
对象。
在测试方法中,应该使用有效的XML创建状态I mock消息服务。进程和响应对象在请求.CreateResponse(HttpStatusCode.Created,response.ToString())中未填充ocorr错误空引用代码>
响应
为空 当然response
为空,没有任何代码可以将其设置为任何值(在您的服务方法或模拟中)
因为您在模拟通常会填充它的方法,所以由您指定如何设置它。在调用Setup
之前,您应该用调用该方法时期望的值填充对象
另外,有关更多信息,请参见此。在Send
方法中声明的response
对象为空。即使我初始化并填写了是否应该\u Status\u\u Create\u和\u Valid\u XML
测试方法,在Send
方法中它也将为空。因此,response.ToString()
将生成一个空引用错误。抱歉。。你说得对,我必须在测试中设定好预期的结果。