-
1.Moq 中 Mock Repository 时最好是 Mock Repository 的接口,这样会避免不知名的错误。
var mockClubRepository = new Mock<IClubRepository> (); mockClubRepository.Setup(mr => mr.GetById(It.IsAny<Guid>()))
2.Moq 中怎样返回空 (How to return null in Moq):
mockRepository.Setup(mr => mr.GetItems()).Returns(() => null );
这种写法很常用,比如返回一个空的List
mockRepository.Setup(mr => mr.GetItems()).Returns(() =>
new
List<Object>);
3. 怎样 Mock 一个 IsValid == false 的 ModelState 。
很简单: UsersController.ModelState.AddModelError("username","Bad username"); 添加个 ModelError 就可以改变 ModelState 的 IsValid 属性了。
4.How to Mock User.Identity.Name
Testing controller Action that uses User.Identity.Name
ControllerCreateControllerForUser(
string
userName)
{
var
mock = newMock<ControllerContext>();
mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(
true
);
var
controller = newSomeController();
controller.ControllerContext = mock.Object;
return
controller;
}
5. 有时候需要单元测试 文件上传 ,那么怎么去 Mock 一个上传的文件呢?
原理很简单,只需要 Mock HttpContext.Request.Files的一些需要的属性即可,例如:
View Code在 ASP.NET MVC 中,上传的文件都是放在HttpPostedFileBase这个对象中,我们可以直接 Mock 这个对象,对保存文件的方法进行单元测试
View Code[TestMethod]
public void TestUpLoadFile()
{
var mockFile = new Mock<HttpPostedFileBase>();
mockFile.Setup(d => d.FileName).Returns("test.txt");
mockFile.Setup(d => d.ContentLength).Returns(100);
mockFile.Setup(d => d.InputStream).Returns(new MemoryStream());
const string uploadsFolder = "D:\\UploadedFiles";
Domain.DMS.File file = _fileService.UploadedFile(mockFile.Object, uploadsFolder);
Assert.AreEqual("test.txt", file.FileName);
Assert.AreEqual(100, file.FileSize);
Assert.AreEqual("txt", file.FileExtension);
}