Я вызываю метод контроллера, который создает объект и сохраняет его в сеансе. Однако, когда я пытаюсь проверить значение возвращаемого сеанса, я не могу понять, как его утверждать?Проверка возвращенной сессии с помощью Moq
Ill предоставить свой код здесь:
Метод испытания
[TestMethod]
public void StartTest()
{
// Arrange
ControllerSetup();
var setup = new Setup { IsCustomMaxGuess = false, MaxGuesses = 3, IsTimed = true };
this._mockSession.SetupGet(s => s["session"]).Returns(null);
this._mockControllerContext.Setup(p => p.HttpContext.Session).Returns(this._mockSession.Object);
this._sut.ControllerContext = this._mockControllerContext.Object;
// Act
var result = _sut.Start(setup) as ViewResult;
// Assert
if (result != null)
//Verify somehow here?
}
метод Контроллер GET
[HttpGet]
public ActionResult Start(Setup gameSetup)
{
ViewBag.Title = "Secret Number - The Game";
SecretNumber sn;
if (Session["session"] == null)
{
sn = new SecretNumber(gameSetup);
Session.Add("session", sn);
return View("GameView", Session["session"]);
}
sn = (SecretNumber)(Session["session"]);
sn.Initialize();
return View("GameView", sn);
}
Так коротко описал это пойдет в Условный оператор в сессии имеет значение null и создает объект. И последнее, но не менее важное: он вернет сеанс с представлением. Я хочу проверить, что он хранит объект secretnumber. Как?
С уважением
Спасибо за отличный ответ. Я попробую это, но то, что мне не нравится, это то, что я собираюсь закончить код только для тестирования внутри класса Setup. например public Setup (ISessionManager sessionManager) и т. д. Как-то не кажется законным, что-то говорит мне, что это неправильно ... – Rovdjuret
Как я уже сказал в своем ответе, в вашем методе вы кодировали конкреции, а не абстракции. По мере того, как вы это сделали, вы не сможете тестировать эти методы без использования ваших зависимостей. То, что я предложил, является учебным подходом, и это не «неправильно делать»! –