Привет Я пытаюсь настроить модульное тестирование контроллеров MVC 3, использующих Hangfire с использованием OWin. При нормальной работе, замедленное воспламенение получает сконфигурировано в функции конфигурации главного контроллера, как этотТестирование модуля MVC-приложения с помощью Hangfire
public void Configuration(IAppBuilder app)
{
var sCon = ConnectionString.GetConnectionString();
try
{
IUnitOfWork oUoW = UnitOfWorkFactory.GetInstance(sCon);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return;
}
app.UseHangfire(config =>
{
config.UseSqlServerStorage(ConnectionString.GetConnectionString());
config.UseServer();
});
}
Я настраиваю HttpContextBase используя Moq как этот
private static HttpContextBase FakeAuthenticatedHttpContext()
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var user = new Mock<IPrincipal>();
var identity = new Mock<IIdentity>();
var application = new Mock<HttpApplicationStateBase>();
context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(session.Object);
context.Setup(ctx => ctx.Server).Returns(server.Object);
context.Setup(ctx => ctx.User).Returns(user.Object);
context.Setup(ctx => ctx.Application).Returns(application.Object);
user.Setup(ctx => ctx.Identity).Returns(identity.Object);
identity.Setup(id => id.IsAuthenticated).Returns(true);
identity.Setup(id => id.Name).Returns("admin");
return context.Object;
}
moBaseController.SetFakeAuthenticatedControllerContext();
Как я фальшивый вызов конфигурации, чтобы настроить хранилище заданий? Я смотрел на документации замедленного воспламенения и они немного загадочные в этой области и отметить, что хранение задания должно быть установлено что-то вроде этого
GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>");
using (new BackgroundJobServer())
{
BackgroundJob.Enqueue(() => ProcessReport(oReportRequest, JobCancellationToken.Null)));
}
однако GlobalConfiguration не известен где-нибудь в тесте контроллера или блока.
Я использую Hangfire версии 1.1.1 и OWin 2.1.
Чтобы подвести итог, я ищу способ издеваться над средой вызова метода MVC 3, чтобы настроить хранилище заданий и фоновый сервер прозрачно. например, как я могу издеваться над контроллером, чтобы при вызове метода это было настроено.
Это, как правило, как я называю контроллер в тестовом модуле:
oViewResult = (ViewResult)moController.RunExport(oRequest);
Assert.IsNotNull(oViewResult, "Didn't return a view result!");
Assert.IsTrue(oViewResult.ViewName == "RunReport", "Didn't return a valid view name!");
Assert.IsTrue(oViewResult.Model != null, "No Model response!");
var oResult = (string)oViewResult.Model;
Assert.IsTrue(oResult == "Ok", "Export did not run as expected!");
Обычно, когда замедленное воспламенение называют это сделано, как это в контроллере
oTokens.Add(oReportStatus.ID, BackgroundJob.Enqueue(() => ProcessReport(oReportRequest, JobCancellationToken.Null)));
Пара вещей. Во-первых, «GlobalConfiguration» - это просто класс с кучей статических методов, я думаю, вы находите его в пространстве имен «Hangfire». Во-вторых, зачем вам нужно что-то делать с Hangfire? Наверняка вам просто нужно проверить свои методы работы. – DavidG
Мне не нужно тестировать Hangfire, мне нужно протестировать контроллер. Способы, которые происходят, чтобы совершать вызовы в Hangfire, т. Е. Мне нужно отлаживать среду Hangfire, хранилище заданий, фоновый сервер и т. Д. – aggaton
Вы [прочитали это] (http: /docs.hangfire.io/en/latest/background-methods/writing-unit-tests.html)? Вместо использования 'BackgroundJob.Enqueue()', вы должны захватить 'IBackgroundJobClient' с фабрики/DI объекта по вашему выбору вместо использования статических классов. То есть вы будете запускать 'IBackgroundJobClient bjc = GetJobClient(); bjc.Enqueue (...); 'Тогда вы просто издеваетесь над' IBackgroundJobClient'. – Rob