【发布时间】:2011-04-01 15:27:13
【问题描述】:
我想我不理解 Mock 中的某些内容,如果我使用 DynamicMock,它应该只验证我期望的调用,对吗?为什么我在下面的测试中出现异常?我不想验证会话是否已设置,我只想验证 _authService.EmailIsUnique 是否使用正确的参数调用。我的问题是在我的 AdminController 中我设置了 _authService.Session...
private MockRepository _mock;
private ISession _session;
private IAuthenticationService _authService;
private AdminController _controller;
private TestControllerBuilder _builder;
[SetUp]
public void
Setup()
{
_mock = new MockRepository();
_session = _mock.DynamicMock<ISession>();
_authService = _mock.DynamicMock<IAuthenticationService>();
_controller = new AdminController(_authService, _session);
_builder = new TestControllerBuilder();
_builder.InitializeController(_controller);
}
[Test]
public void Register_Post_AddModelErrorWhenEmailNotUnique()
{
var userInfo = new RegisterModel();
userInfo.Email = "the_email@domain.com";
//_authService.Expect(x => x.Session = _session).Repeat.Once();
Expect.Call(_authService.EmailIsUnique(userInfo.Email)).Repeat.Once().Return(false);
_mock.ReplayAll();
var result = _controller.Register(userInfo);
var viewResult = (ViewResult)result;
_authService.VerifyAllExpectations();
result.AssertViewRendered().ForView("").WithViewData<RegisterModel>();
Assert.That(viewResult.ViewData.Model, Is.EqualTo(userInfo));
}
Rhino.Mocks.Exceptions.ExpectationViolationException : IAuthenticationService.set_Session(ISessionProxy2f2f623898f34cbeacf2385bc9ec641f);预期 #1,实际 #0。
感谢您的帮助!
更新
这是我的控制器和 AuthService 的一部分...我使用 Ninject 作为 DI,因为我的 AuthService 在我的域中,而 Ninject 在我的 WebApp 我不知道如何在我的 AuthService 中使用 DI 来解决我的会议。再次感谢!
public partial class AdminController : Controller
{
private IAuthenticationService _authService;
private ISession _session;
public AdminController(IAuthenticationService authService, ISession session)
{
_authService = authService;
_authService.Session = session;
_session = session;
}
[HttpPost]
[Authorize(Roles = "Admin")]
[ValidateAntiForgeryToken]
public virtual ActionResult Register(RegisterModel userInfo)
{
if (!_authService.EmailIsUnique(userInfo.Email)) ModelState.AddModelError("Email", Strings.EmailMustBeUnique);
if (ModelState.IsValid)
{
return RegisterUser(userInfo);
}
return View(userInfo);
}
private RedirectToRouteResult RegisterUser(RegisterModel userInfo)
{
_authService.RegisterAdmin(userInfo.Email, userInfo.Password);
var authToken = _authService.ForceLogin(userInfo.Email);
SetAuthCookie(userInfo.Email, authToken);
return RedirectToAction(MVC.Auction.Index());
}
}
public class AuthenticationService : IAuthenticationService
{
public ISession Session { get; set; }
public bool EmailIsUnique(string email)
{
var user = Session.Single<User>(u => u.Email == email);
return user == null;
}
}
【问题讨论】:
-
请显示您要测试的控制器和操作。
标签: c# asp.net-mvc-3 rhino-mocks