我从来没有使用任何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)>.
我做错了什么?
由于
答案 0 :(得分:4)
简单 - 你没有正确行动部分。 Fisrt你应该调用控制器的Index()
动作,然后断言ViewBag.UserEmail正确性
// Act
controller.Index();
string result = controller.ViewBag.UserEmail;
顺便说一句,建议 - 使用ViewBag并不是一个好习惯。改为定义ViewModels