Как Вы дразните использование набора объекта сессии Moq

Возможно, вы слышали о книге Саттон-Барто о подкрепление-обучение-введение-118 . В этой книге вы найдете много примеров обучения Q с использованием table, а также с neural-network.

Есть также сравнение между многими другими алгоритмами, такими как SARSA, TD, Q, value-function и т. Д. В этой ссылке вы найдете репозиторий кода, который имеет решение почти всех проблем из книги.

Не стесняйтесь задавать вопросы.

44
задан FireStormHR 15 November 2017 в 09:33
поделиться

4 ответа

Я запустил с MVCMockHelper Scott Hanselman, добавил маленький класс и сделал модификации показанными ниже позволить контроллеру обычно использовать Сессию и модульный тест для проверки значений, которые были установлены контроллером.

/// <summary>
/// A Class to allow simulation of SessionObject
/// </summary>
public class MockHttpSession : HttpSessionStateBase
{
    Dictionary<string, object> m_SessionStorage = new Dictionary<string, object>();

    public override object this[string name]
    {
        get { return m_SessionStorage[name]; }
        set { m_SessionStorage[name] = value; }
    }
}

//In the MVCMockHelpers I modified the FakeHttpContext() method as shown below
public static HttpContextBase FakeHttpContext()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    var response = new Mock<HttpResponseBase>();
    var session = new MockHttpSession();
    var server = new Mock<HttpServerUtilityBase>();

    context.Setup(ctx => ctx.Request).Returns(request.Object);
    context.Setup(ctx => ctx.Response).Returns(response.Object);
    context.Setup(ctx => ctx.Session).Returns(session);
    context.Setup(ctx => ctx.Server).Returns(server.Object);

    return context.Object;
}

//Now in the unit test i can do
AccountController acct = new AccountController();
acct.SetFakeControllerContext();
acct.SetBusinessObject(mockBO.Object);

RedirectResult results = (RedirectResult)acct.LogOn(userName, password, rememberMe, returnUrl);
Assert.AreEqual(returnUrl, results.Url);
Assert.AreEqual(userName, acct.Session["txtUserName"]);
Assert.IsNotNull(acct.Session["SessionGUID"]);

Это не прекрасно, но это работает достаточно на тестирование.

63
ответ дан RonnBlack 26 November 2019 в 21:54
поделиться

Используя Moq 3.0.308.2 вот пример моей установки контроллера учетной записи в моем модульном тесте:

    private AccountController GetAccountController ()
    {
      .. setup mocked services..

      var accountController = new AccountController (..mocked services..);

      var controllerContext = new Mock<ControllerContext> ();
      controllerContext.SetupGet(p => p.HttpContext.Session["test"]).Returns("Hello World");
      controllerContext.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(_testEmail);
      controllerContext.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
      controllerContext.SetupGet(p => p.HttpContext.Response.Cookies).Returns(new HttpCookieCollection ());

      controllerContext.Setup (p => p.HttpContext.Request.Form.Get ("ReturnUrl")).Returns ("sample-return-url");
      controllerContext.Setup (p => p.HttpContext.Request.Params.Get ("q")).Returns ("sample-search-term");

      accountController.ControllerContext = controllerContext.Object;

      return accountController;
    }

тогда в рамках Вашего метода контроллера следующее должно возвратить "Привет Мир"

string test = Session["test"].ToString ();
35
ответ дан Todd Smith 26 November 2019 в 21:54
поделиться

Я просто нашел хороший пример того, как команда Oxite фальсифицирует их HttpSessionState и поддерживает набор SessionStateItemCollection в той фальшивке. Это должно работать точно так же как moq в моем случае.

РЕДАКТИРОВАНИЕ:

URL для этого примера http://oxite.codeplex.com/sourcecontrol/changeset/view/33871?projectName=oxite#388065

2
ответ дан Patrick McDonald 26 November 2019 в 21:54
поделиться

Я думаю, что можно установить ожидание по насмешке с определенным значением, которое она должна возвратить что. Насмешки не используются в качестве фактических фальшивок, а скорее вещей, на которых можно утверждать поведение.

Это кажется на фактический поиск адаптера, что можно перенести сессию, что можно предоставить другую реализацию во время тестов и во время времени выполнения, это возвратило бы объекты Сессии HttpContext?

это имеет смысл?

0
ответ дан Sean Chambers 26 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: