一般的には、POSTリクエストをテストしているものを除いて、すべてのテストが正常に実行されています。常にBadRequestを返します。どういうわけか、それ以下のレベルの発射ではない(サービスレイヤやデータレイヤーなど)ため、何が間違っているのか正確には分かりません。テスト中の
WebApi POSTリクエストのユニットテストの正しい方法は何ですか?
[TestMethod]
public async Task AddTourObject()
{
// Упорядочение
var mockService = new Mock<ITourObjectService>(MockBehavior.Default);
var viewmodel = new TourObjectViewModel
{
TypeId = 10,
Name = "Деревья гнулись",
Address = "f yjxr",
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(It.IsAny<TourObjectDTO>())).ReturnsAsync(new ActionAnswer { });
var controller = new TourObjectController(mockService.Object);
// Действие
var result = await controller.Post(viewmodel);
// Утверждение
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult<string>));
Assert.IsTrue(result.ToString().Contains("успешно"));
}
と方法:ここで
は、試験方法である
public async Task<IHttpActionResult> Post(TourObjectViewModel viewmodel)
{
var answer = new ActionAnswer();
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);
return answer.IsSuccess == false ? (IHttpActionResult) BadRequest(answer.ToString()) : Ok(answer.ToString());
}
catch (Exception ex)
{
Log.ErrorFormat("Method:{0} <br/> Error: {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
return BadRequest(answer.ToString());
}
}
- 私が正しく、このテストを設定するのですか?
- これは私がテストする必要がありますか?
ActionAnswer {}はどのようにIsSuccessを初期化しますか?私はコントローラが 'BadRequest'を返すことを意味する' false'を期待します。 – Johnny
@Lepijohnny、通常は下のレベルのメソッド(Service Layer)、ActionAnswerメソッドを返し、IsSuccess enumをfalseまたはtrueに設定します。 –
@ Lepijohnny、おそらく私はMoqの働きを理解していないでしょう。以前は、WebApi> Service> DataAccessLayerというフルサイクルを迎えていると思います。 –