web-dev-qa-db-fra.com

Pourquoi TestServer n'est-il pas en mesure de trouver des contrôleurs lorsque le contrôleur se trouve dans une application Assembly distincte pour asp.net core?

Pour une raison quelconque, lorsque les contrôleurs principaux ASP.NET sont créés dans un assembly séparé, le TestServer n'est pas en mesure de trouver les actions du contrôleur lorsque le client fait une demande (entraîne une réponse 404) Pourquoi cela? Comment contourner cela? Voici les étapes à reproduire.

  1. Créer un nouveau WebAPI ASP.NET Core à l'aide de .NET core
  2. Créez des tests d'intégration dans un projet distinct et configurez le test pour utiliser le client TestServer () et faire fonctionner les tests avec succès.
  3. Maintenant, séparez le contrôleur dans sa propre bibliothèque partagée et projet de refactorisation créé à l'étape 1 pour utiliser cette bibliothèque partagée à la place.
  4. Relancez le test qui contient la classe TestServer (). Vous remarquerez maintenant qu'il échoue.

Voir le lien suivant pour créer les tests d'intégration. Test d'intégration avec ASP.NET Core

27
jbooker

En fait, j'ai trouvé une solution pour l'instant, voir diff ci-dessous: enter image description here

Il semble que cela puisse être un bogue de la classe TestServer () et comment il héberge l'application pendant l'exécution du test.

Voici la ligne de code au cas où vous ne pourriez pas lire ci-dessus dans l'image

.AddApplicationPart(Assembly.Load(new AssemblyName("WebApiToReproduceBug.Controllers"))); 
32
joey

En plus de la réponse de joey: il n'est pas nécessaire d'appeler Assembly.Load () pour résoudre ce bogue. Vous pouvez utiliser le code ci-dessous. ServiceHookController est une classe d'un projet distinct.


public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddApplicationPart(typeof(ServiceHookController).Assembly);
}
8
Karel Kral

Si vous suivez les pré-requis de la documentation MS les contrôleurs d'assemblages séparés sont chargés.

Dans mon cas, l'ajout de package Microsoft.AspNetCore.Mvc.Testing NuGet a résolu le problème et je n'ai plus besoin d'appeler AddApplicationPart.

2
beskuet