안녕하세요. 컨트롤러에서 내 로그 아웃 작업을 테스트하고 있지만 HttpContext에서 내 세션을 테스트하거나 스터핑하는 데 어려움이 있습니다. 내가 쉽게 MVC Contrib TestHelper을 사용하고 있지만 지금은 약간의 도움이 필요합니다. 당신은 내의 differents 시도한다을 볼 수 있습니다MVCContrib TestHelper session.clear, session.abandon 및 Rhino Mock의 문제
[TestFixture]
public class SessionControllerTest
{
private ISession _session;
private IConfigHelper _configHelper;
private IAuthenticationService _authService;
//private IMailHelper _mailHelper;
private ICryptographer _crypto;
private SessionController _controller;
private TestControllerBuilder _builder;
private MockRepository _mock;
[SetUp]
public void Setup()
{
_mock = new MockRepository();
_session = _mock.DynamicMock<ISession>();
_configHelper = _mock.DynamicMock<IConfigHelper>();
_authService = _mock.DynamicMock<IAuthenticationService>();
//_mailHelper = _mock.DynamicMock<IMailHelper>();
_crypto = _mock.DynamicMock<ICryptographer>();
_controller = new SessionController(_authService, _session, _crypto, _configHelper);
_builder = new TestControllerBuilder();
_builder.InitializeController(_controller);
}
[Test]
public void Logout_ReturnRedirectToAction()
{
_builder.InitializeController(_controller);
_authService.SignOut();
LastCall.Repeat.Once();
_builder.Session["memberNumber"] = string.Empty;
LastCall.Repeat.Once();
_controller.Session.Clear();
LastCall.Repeat.Any();
_controller.Session.Abandon();
LastCall.Repeat.Any();
//_builder.Session.Stub(s => s.Clear());
//_builder.Session.Stub(s => s.Abandon());
//_builder.Session.Clear();
//LastCall.Repeat.Once();
//_builder.Session.Abandon();
//LastCall.Repeat.Once();
_mock.ReplayAll();
var result = _controller.Logout();
_mock.VerifyAll();
result.AssertActionRedirect().ToAction<SessionController>(c => c.Login());
}
:
여기 내 테스트입니다. MVCContrib의 TestHelper를 살펴볼 때 Session.Abandon()이 구현되지 않았다는 오류가 발생합니다. 하지만 TestHelper가 이미 조롱 한 세션을 어떻게 조롱하거나 스텁 할 수 있습니까?
NUnit과의 예외 :
System.NotImplementedException 다음 의 방법 또는 동작이 구현 아니다. MvcContrib.TestHelper.MockSession.Abandon()
감사합니다!
편집 : 저는 여기에 MvcContrib를 사용하기 때문에 그것은 잠시이었다 새로운 작업 테스트
[Test]
public void Logout_ReturnRedirectToAction()
{
_builder.InitializeController(_controller);
var mockSession = _mock.Stub<HttpSessionStateBase>();
_controller.HttpContext.BackToRecord();
_controller.HttpContext.Stub(c => c.Session).Return(mockSession);
_controller.HttpContext.Replay();
_authService.SignOut();
LastCall.Repeat.Once();
_builder.Session["memberNumber"] = string.Empty;
_controller.Session.Clear();
LastCall.Repeat.Once();
_controller.Session.Abandon();
LastCall.Repeat.Once();
_mock.ReplayAll();
var result = _controller.Logout();
_mock.VerifyAll();
result.AssertActionRedirect().ToAction<SessionController>(c => c.Login());
}
패트릭에게 감사합니다. 훌륭한 작품입니다! 나는 BackToRecord()에 대해 몰랐다. – VinnyG