Hallo Ich versuche, Unit-Test für MVC 3-Controller, die Hangfire mit OWin verwenden testen. Im normalen Betrieb, wird in der Konfigurationsfunktion des Hauptreglers wie dieseUnit testet MVC app mit 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();
});
}
Ich Einrichtung Httpcontextbase mit Moq wie diese
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();
Wie fälschen ich den Anruf Konfiguration Hangfire konfiguriert den Jobspeicher einrichten? Ich habe an der Hangfire Dokumentation suchen und sie sind ein wenig kryptisch in diesem Bereich und soll erwähnen, dass Jobspeicher so etwas wie diese
GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>");
using (new BackgroundJobServer())
{
BackgroundJob.Enqueue(() => ProcessReport(oReportRequest, JobCancellationToken.Null)));
}
jedoch GlobalConfiguration bekannt ist, nicht überall in der Steuerung oder Unit-Test eingerichtet werden.
Ich benutze Hangfire Version 1.1.1 und OWin 2.1.
Zusammenfassend suche ich nach einer Möglichkeit, die Umgebung eines MVC 3 Methodenaufrufs zu verspotten, um Job Storage und Background Server transparent einzurichten. d. h. wie kann ich den Controller verspotten, so dass wenn die Methode aufgerufen wird, dies eingerichtet wurde.
Dies ist im Allgemeinen, wie ich den Controller in dem Unit-Test nennen:
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!");
Im Allgemeinen, wenn Hangfire es so in der Steuerung erfolgt genannt wird
oTokens.Add(oReportStatus.ID, BackgroundJob.Enqueue(() => ProcessReport(oReportRequest, JobCancellationToken.Null)));
Ein paar Dinge. Erstens, 'GlobalConfiguration' ist nur eine Klasse mit einer Reihe von statischen Methoden, ich denke, Sie finden es im 'Hangfire'-Namespace. Zweitens, warum musst du etwas mit Hangfire testen? Sicherlich müssen Sie nur Ihre Arbeitsmethoden testen. – DavidG
Ich muss Hangfire nicht testen, ich muss Controller-Methoden testen, die Hangfire anrufen, dh ich muss die Hangfire-Umgebung, den Jobspeicher, den BackgroundServer usw. verstellen. – aggaton
Hast du [dies gelesen] (http://docs.hangfire.io/en/latest/background-methods/writing-unit-tests.html)? Anstatt "BackgroundJob.Enqueue()" zu verwenden, sollten Sie "IBackgroundJobClient" aus der Objektfactory/DI Ihrer Wahl verwenden, anstatt die statischen Klassen zu verwenden. Das heißt, Sie würden 'IBackgroundJobClient bjc = GetJobClient() ausführen; bjc.Enqueue (...); 'Dann verspottet man einfach' IBackgroundJobClient'. – Rob