我从未使用过任何Mock框架,实际上是ASP新手。. NET MVC,测试和所有这些相关的东西
我试图找出如何使用Moq框架进行测试,但不能使它工作。我的存储库接口:
public interface IUserRepository {
string GetUserEmail();
bool UserIsLoggedIn();
ViewModels.User CurrentUser();
void SaveUserToDb(ViewModels.RegisterUser viewUser);
bool LogOff();
bool LogOn(LogOnModel model);
bool ChangePassword(ChangePasswordModel model);
}
我的控制器构造函数,我使用Ninject进行注入,它运行良好
private readonly IUserRepository _userRepository;
public HomeController(IUserRepository userRepository) {
_userRepository = userRepository;
}
控制器中最简单的方法:
public ActionResult Index() {
ViewBag.UserEmail = _userRepository.GetUserEmail();
return View();
}
和我的测试方法:
[TestMethod]
public void Index_Action_Test() {
// Arrange
string email = "test@test.com";
var rep = new Mock<IUserRepository>();
rep.Setup(r => r.GetUserEmail()).Returns(email);
var controller = new HomeController(rep.Object);
// Act
string result = controller.ViewBag.UserEmail;
// Assert
Assert.AreEqual(email, result);
}
我假设这个测试必须通过,但是它失败了,消息是Assert.AreEqual failed. Expected:<test@test.com>. Actual:<(null)>.
我做错了什么?
谢谢
简单-你没有正确做Act部分。首先你应该调用控制器的Index()
动作,然后断言ViewBag。UserEmail正确性
// Act
controller.Index();
string result = controller.ViewBag.UserEmail;
顺便说一下,建议-使用ViewBag不是好的做法。定义ViewModels