ASP.NET MVCプロジェクトを開発中です。私のプロジェクトでは、単体テストをやっています。私はビジネスロジックを模擬するためにMoqを使用しています。しかし、私はMoqに問題があります。特にmock.Verifyメソッドで。下記の私のシナリオをご覧ください。ASP.NET MVCユニットテストでMoqのスローエラーを確認する方法
これは、私はこれがあなたが私の試験方法を見ることができるように、私は確信してregionRepo.Update方法があることを確認するために確認してください使用しています私のテスト機能
[TestMethod]
public void Edited_And_Redirected()
{
var postFile = new Mock<HttpPostedFileBase>();
postFile.Setup(m => m.ContentLength).Returns(1);
CreateRegionVM model = new CreateRegionVM
{
Id = 1,
Name = "test",
ImageFile = postFile.Object
};
Mock<IRegionRepo> regionMock = new Mock<IRegionRepo>();
regionMock.Setup(m => m.Update(new Region())).Verifiable();
Mock<IFileHelper> fileMock = new Mock<IFileHelper>();
fileMock.Setup(m => m.UploadFile(model.ImageFile, It.IsAny<String>(), null)).Returns("upload_file_path");
RegionController controller = new RegionController(regionMock.Object, fileMock.Object, 0);
var unknownView = controller.Edit(model);
regionMock.Verify();
Assert.IsInstanceOfType(unknownView, typeof(RedirectToRouteResult), "Not redirected");
}
ある
[HttpPost]
public ActionResult Edit(CreateRegionVM model)
{
if(ModelState.IsValid)
{
Region region = new Region
{
Id = model.Id,
Name = model.Name,
MmName = model.MmName,
Description = model.Description,
MmDescription = model.MmDescription,
GeoLocation = model.GeoLocation,
ImagePath = model.ImagePath
};
String imagePath = String.Empty;
if(model.ImageFile!=null && model.ImageFile.ContentLength>0)
{
imagePath = fileHelper.UploadFile(model.ImageFile, AppConfig.RegionImageDir,null);
if(String.IsNullOrEmpty(imagePath))
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
}
else
{
//create thumb & delete old images - check the image operations
fileHelper.CreateThumb(imagePath, AppConfig.RegionImageDir, AppConfig.RegionMediumThumbWidth, AppConfig.RegionMediumThumbHeight, AppConfig.MediumThumbSuffix);
fileHelper.CreateThumb(imagePath, AppConfig.RegionImageDir, AppConfig.RegionSmallThumbWidth, AppConfig.RegionSmallThumbHeight, AppConfig.SmallThumbSuffix);
fileHelper.DeleteFile(model.ImagePath);
fileHelper.DeleteFile(fileHelper.GetImagePath(model.ImagePath, AppConfig.MediumThumbSuffix));
fileHelper.DeleteFile(fileHelper.GetImagePath(model.ImagePath, AppConfig.SmallThumbSuffix));
model.ImagePath = imagePath;
}
}
try
{
regionRepo.Update(region);
TempData["message"] = "Region successfully edited";
TempData["class"] = AppConfig.FlashSuccessClass;
return RedirectToAction("Edit", new { id = model.Id });
}
catch
{
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
}
}
return View("Create",model);
}
をテストしていアクションですと呼ばれる。しかし、テストを実行すると、このエラーが表示されます。
Moq.MockVerification例外:以下のセットアップが一致しなかった。 IRegionRepoメートル=> M =>更新()
なぜこのエラーがスローされますか? moqのverifyメソッドはどのように動作しますか?
@Waiを試してみてください、それを問題ではない場合したがって、検証可能である。 – mason
したがって、比較はおおまかに出力の比較に使用されますか? voidメソッドの場合は、検証して模擬することができます。それは...ですか? –
'Verify'メソッドが呼び出されたことを確認するために使用されます。 'Verifiable'はあなたが' Verify'を呼び出すつもりであることを示します。パラメータが重要な場合は、特定のパラメータを指定できます。しかし、それらが問題でなければ、あなたは 'It.IsAny'を使うでしょう。 –