我有一个表单过程,我想用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