Le code suivant fonctionne comme prévu et est vraiment similaire aux échantillons trouvés sur le site ASP:
protected BaseResourceTests(string resourceVersion) { var hostBulider = new WebHostBuilder() .UseStartup<TestStartup>(); _server = new TestServer(hostBulider); HttpClient = _server.CreateClient(); HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(resourceVersion)); HttpClient.BaseAddress = new Uri("http://localhost:5000"); }
4 Réponses :
J'ai écrit un message sur ce type d'essai d'intégration avec Xunit ici: http://andrewlock.net/introduction-to-Integration-testing-with-xu-and-tesserverver-in-asp-net-core .
L'approche que j'ai prise était de créer une classe code> code> qui peut être injectée dans votre classe de test. p>
Le luminaire: p> La classe de test puis implémente Pour utiliser MVC, et assurez-vous que vos vues peuvent être découvertes, vous devez mettre à jour votre iclassfixture
WebhostBuilder / code> pour définir le chemin de contenu: P>
var path = PlatformServices.Default.Application.ApplicationBasePath;
var setDir = Path.GetFullPath(Path.Combine(path, <projectpathdirectory> ));
var builder = new WebHostBuilder()
.UseContentRoot(setDir)
.UseStartup<TStartup>();
Merci, j'ai lu votre message de blog avant de poster ma question en réalité, et de mes tests, il présente le même comportement, je vais faire un repo bientôt avec pour prouver cela.
Quelle version .NET CORE utilisez-vous? Aperçu1? P>
Mise à jour sur RTM (Aperçu2--31 ...) Peut-être que vous avez rencontré un bug déjà corrigé. P>
.NET CORE RC2 C'est dans le titre de la question, la version complète a été publiée, j'aurai un test avec cela.
désolé, pour moi, RC2 est prévisionneur1: D comme le SDK
Vous ne pouvez pas remplacer vos services par des services de test de cette façon. Ce que j'ai fait, cédez des méthodes qui ont ajouté des dépendances et ont fait la méthode surdable. Ensuite, dans mon test, je remplacerais cette méthode et injecterais différentes dépendances. P>
J'explique cela aussi dans mon blog:
Un autre changement supplémentaire que je devais faire pour que la classe de démarrage remplacée est de définir l'applicationName de l'objet Ihostingenvironment sur le nom réel du projet Web.
public TestStartup(IHostingEnvironment env) : base(env) { env.ApplicationName = "Demo.Web"; }
Essayez de changer '_Server = nouveau testServer (hostbulider);' à _server = testServer.createbuilder (). USESTARTUP ();
Il n'y a pas de méthode statique CreateBuilder sur la classe TestServer, je pense que cela avait l'habitude d'être dans RC1