Возможно, вы слышали о книге Саттон-Барто о подкрепление-обучение-введение-118 . В этой книге вы найдете много примеров обучения Q
с использованием table
, а также с neural-network
.
Есть также сравнение между многими другими алгоритмами, такими как SARSA, TD, Q, value-function и т. Д. В этой ссылке вы найдете репозиторий кода, который имеет решение почти всех проблем из книги.
Не стесняйтесь задавать вопросы.
Я запустил с 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"]);
Это не прекрасно, но это работает достаточно на тестирование.
Используя 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 ();
Я просто нашел хороший пример того, как команда Oxite фальсифицирует их HttpSessionState и поддерживает набор SessionStateItemCollection в той фальшивке. Это должно работать точно так же как moq в моем случае.
РЕДАКТИРОВАНИЕ:
URL для этого примера http://oxite.codeplex.com/sourcecontrol/changeset/view/33871?projectName=oxite#388065
Я думаю, что можно установить ожидание по насмешке с определенным значением, которое она должна возвратить что. Насмешки не используются в качестве фактических фальшивок, а скорее вещей, на которых можно утверждать поведение.
Это кажется на фактический поиск адаптера, что можно перенести сессию, что можно предоставить другую реализацию во время тестов и во время времени выполнения, это возвратило бы объекты Сессии HttpContext?
это имеет смысл?