9
votes

Les tests d'intégration non triviale .NET CORE CORE RC2 ne fonctionne pas

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");
    }


2 commentaires

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


4 Réponses :


1
votes

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> xxx pré>

La classe de test puis implémente iclassfixture > code>: p> xxx pré>

Pour utiliser MVC, et assurez-vous que vos vues peuvent être découvertes, vous devez mettre à jour votre 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>();


1 commentaires

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.



0
votes

Quelle version .NET CORE utilisez-vous? Aperçu1?

Mise à jour sur RTM (Aperçu2--31 ...) Peut-être que vous avez rencontré un bug déjà corrigé.


2 commentaires

.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



0
votes

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.

J'explique cela aussi dans mon blog: http://www.stefanhendriks.com/2016/04/29/integration-testing-your-dot-net-core-app-with-an-in-memorie -database /


0 commentaires

2
votes

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";
        }


0 commentaires