我有一個表單過程,我想用Moq進行單元測試。 我有單元測試的工作代碼獲取WebApi的方法,它的工作很好,但我不知道如何寫一篇文章MVC控制器中的無效方法。MVC Moq單元測試無效方法
我想測試ModelState.IsValid和異常如果無效返回。
控制器
public class HomeController : Controller
{
private IEditDataRepository _editDataRepository;
public HomeController()
{
//Default Constructor
}
//Dependency Injection using Unity.MVC5 NuGet Package
public HomeController(IEditDataRepository editDataRepository)
{
_editDataRepository = editDataRepository;
}
[HttpPost]
[ValidateAntiForgeryToken]
public void Edit([Bind(Include = "Field1,Field2")] FormViewModel model)
{
if (ModelState.IsValid)
{
_editDataRepository.Edit(model);
}
else
{
throw new HttpException(400, "ModelState Invalid");
}
}
}
REPOSITORY
public class EditDataRepository : IEditDataRepository, IDisposable
{
private DBEntities db = new DBEntities();
public void Edit(FormViewModel model)
{
db.MyProcedure(model.Field1,model.Field2);
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
db.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
單元測試
我能做的設置有點在這裏,但我之後我不知道。 如何檢查ModelState.IsValid而無效(返回異常)?
[TestMethod]
public void TestSomething()
{
//Arrange
var mockRepository1 = new Mock<IEditDataRepository>();
mockRepository1
.Setup(x => x.Edit(It.IsAny<FormViewModel>()));
HomeController controller = new HomeController(mockRepository1.Object);
//Act
controller.Edit(It.IsAny<FormViewModel>());
//Assert
}
只是傳遞一個無效的'FormViewModel'到編輯操作。 –
或手動設置模型狀態:http://stackoverflow.com/questions/3822873/how-to-mock-modelstate-isvalid-using-the-moq-framework –
好奇,爲什麼你對控制器的操作無效? – Nkosi