こんにちは私のコントローラで私のログアウトアクションをユニットテストしようとしていますが、HttpContextでセッションをテストしたりスタブするのは難しい時があります。私はそれを簡単にするためにMVC Contrib TestHelperを使用していますが、今は少し助けが必要です。あなたは私の貴様のattempsを見ることができます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());
}
:
は、ここに私のテストです。 Session.Abandon()が実装されていないというエラーが表示され、MVCContribのTestHelperを見てみると魔法使いが正しいです。しかし、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