我正在尝试测试WebApi post方法。但是我完全混淆了测试失败的原因 - 看起来像类构造函数还没有被初始化
这是测试方法:
public async Task<IHttpActionResult> Post(TourObjectViewModel viewmodel)
{
var answer = new ActionAnswer(); \\this variable is null
try
{
var dto = new TourObjectDTO
{
TypeId = viewmodel.TypeId,
Name = viewmodel.Name,
Address = viewmodel.Address,
Latitude = viewmodel.Latitude,
Longitude = viewmodel.Longitude,
CountryId = viewmodel.CountryId,
RegionId = viewmodel.RegionId,
CityId = viewmodel.CityId.Value,
Rating = viewmodel.Rating,
InternalRating = viewmodel.InternalRating,
CheckInTime = viewmodel.CheckInTime,
CheckOutTime = viewmodel.CheckOutTime,
HowToGet = viewmodel.HowToGet,
Web = viewmodel.Web,
Email = viewmodel.Email
};
answer = await _tos.Add(dto);
}
catch (Exception ex)
{
Log.ErrorFormat("Method:{0} <br/> Error: {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
return BadRequest(answer.ToString());
}
return Ok(answer.ToString());
}
这是测试方法:
[TestMethod]
public async Task AddTourObject()
{
// Упорядочение
var mockService = new Mock<ITourObjectService>(MockBehavior.Default);
var dto = new TourObjectDTO()
{
TypeId = 10,
Name = "fgasdfsdfasdf",
Address = "fgasdfsdfasdf",
Latitude = 120.22,
Longitude = 220.34,
CountryId = 1,
RegionId = 2,
CityId = 1,
Rating = 2,
InternalRating = 2,
CheckInTime = "12:00",
CheckOutTime = "12:00",
HowToGet = "sss",
Web = "web",
Email = ""
};
var viewmodel = new TourObjectViewModel
{
TypeId = 10,
Name = "fgasdfsdfasdf",
Address = "fgasdfsdfasdf",
Latitude = 120.22,
Longitude = 220.34,
CountryId = 1,
RegionId = 2,
CityId = 1,
Rating = 2,
InternalRating = 2,
CheckInTime = "12:00",
CheckOutTime = "12:00",
HowToGet = "sss",
Web = "web",
Email = ""
};
mockService.Setup(x => x.Add(dto)).ReturnsAsync(new ActionAnswer { });
var controller = new TourObjectController(mockService.Object);
// Действие
var result = await controller.Post(viewmodel);
// Утверждение
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult<ActionAnswer>));
}
NRE测试失败:
System.NullReferenceException:Ссылканаобъектнеуказываетна экземпляробъекта.. вCamps.Api.Controllers.TourObjectController。
<Post>
d__5.MoveNext()в D:\ Dev \ Camps \ Camps.Api \ Controllers \ TourObjectController.cs:строка147
答案 0 :(得分:0)
添加设置需要特定的对象,但您正在测试的方法中构建一个新对象。如果目标只是在添加时返回ActionAnswer
,请尝试
mockService.Setup(x => x.Add(It.IsAny<TourObjectDTO>())).ReturnsAsync(new ActionAnswer { });