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.
Voir le lien suivant pour créer les tests d'intégration. Test d'intégration avec ASP.NET Core
En fait, j'ai trouvé une solution pour l'instant, voir diff ci-dessous:
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")));
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);
}
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
.