1
WebApiのポストメソッドをテストしようとしています。しかし、私は、テストが失敗した理由を完全に混乱させています。クラスコンストラクタのようなものは初期化されていません。ここ
は、テスト対象のメソッドです:
WebApi Moq。テスト中のメソッドのフィールドが初期化されていません
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:Ссылканаобъектнеуказываетを экземпляробъекта.. вキャンプ。 Api.Controllers.TourObjectController。
<Post>
d__5.MoveNext() Dв:\ Devの\キャンプ\ Camps.Api \コントローラ\ TourObjectController.cs:147
テストが失敗した理由に関するエラーメッセージを投稿してください。 – Stormhashe
@Nkosi、_tosはコントローラに注入されたサービスです。メソッドシグネチャを追加するには:public async Task Add(TourObjectDTO dto) –
@ andrey.shedkoあなたの投稿を読み直した後に、それで私はなぜ私のコメントを削除した。私の答えをチェックする – Nkosi