Ich entwickle ein ASP.NET MVC-Projekt. In meinem Projekt mache ich Unit Testing. Ich benutze Moq, um meine Geschäftslogik zu verspotten. Aber ich habe ein Problem mit Moq. Vor allem mit mock.Verify-Methode. Bitte sehen Sie mein Szenario unten.Verify Methode Moq werfen Fehler in ASP.NET MVC-Unit-Test
Dies ist die Aktion, die ich
Prüfung am[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);
}
Diese Funktion meines Tests ist
[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");
}
Wie Sie meine Testmethode sehen können, ist mir sicher, dass regionRepo.Update Methode, um mit verifizieren namens. Aber es gibt mir diesen Fehler, wenn ich den Test durchführe.
Moq.MockVerification Ausnahme: Die folgenden Einstellungen wurden nicht angepasst: IRegionRepo m => m => Update()
Warum wird dieser Fehler ausgelöst? Wie funktioniert die Verifikationsmethode von moq?
@Wai Die 'It.IsAny' grundsätzlich Drähte spielt keine Rolle, bis es, dass so * jeder * Region, die Teil der Mock-Implementierung wird an sie übergeben wird sein und daher überprüfbar. –
mason
Also wird Verify grob für den Vergleich der Ausgabe verwendet? Wenn void-Methode, können wir nur überprüfen und verspotten. Ist es? –
'Verify' wird verwendet, um zu überprüfen, dass Methoden aufgerufen wurden. 'Überprüfbar' zeigt an, dass Sie' Bestätigen' aufrufen möchten. Wenn die Parameter wichtig sind, können Sie spezifische Parameter angeben. Aber wenn sie nicht wichtig sind, würden Sie 'It.IsAny' verwenden. –