Je reçois l'erreur suivante:
[TestInitialize] public void Initialize() { BootStrapper.RegisterTypes(); } [TestMethod] public void Can_Create_Alert_Management_Object() { IAlertManagement alertManagementService = BootStrapper.Kernel.Get<IAlertManagement>(); Assert.IsNotNull(alertManagementService); } //This is the code that gets called in [TestInitialize] public static void RegisterTypes() { if (!initialized) { Kernel.Bind(scanner => scanner.FromAssembliesMatching("MyCompany.MyProduct.*") .SelectAllClasses() .BindDefaultInterface()); Kernel.Unbind(typeof(IWcfServiceClient<>)); Kernel.Bind(typeof(IWcfServiceClient<>)).ToMethod(ctx => (ctx.Kernel.Get(typeof(WcfServiceClientProvider<>).MakeGenericType(ctx.GenericArguments)) as IProvider).Create(ctx)); } initialized = true; }
3 Réponses :
La première chose à vérifier est de vous assurer que la DLL contenant la mise en œuvre de Une autre chose à essayer serait de déplacer le code de chargement du noyau sur un ou cela pourrait être dû partiellement au fait que le serveur peut utiliser Server GC . Je ne sais pas si le forçant à utiliser Workstation GC aiderait ou non, mais cela vaut la peine d'essayer. P> LI>
ol> ialertManagement code> est copiée dans le répertoire approprié sur le serveur de construction afin que les tests le voient. p> li>
de classinitialiser code> à la place d'un
testinitialiser code>, juste pour voir s'il y a une sorte de condition de race ou autre chose liée. J'ai vu des erreurs aléatoires sur les serveurs de construction dues aux objets disposés dans un ordre différent ou plus tôt que cela ne se produirait normalement (impliqué RX, TPL et des exceptions non observées dans mon cas). Il se peut que plus de tests soient exécutés en parallèle sur le serveur de construction que sur le bureau. P> LI>
Je vois la DLL contenant ialertManagement code> dans le dossier DROP du serveur de construction. J'ai également essayé de changer la classe de test de l'unité pour utiliser
[classinitialize] code> au lieu de
[testinitialize] code> mais il ne semblait pas aider. Je n'ai pas exploré l'option 3.
Juste pour tester, essayez de mettre l'alerte concrète dans un assemblage que vous connaissez est vu, comme le noyau. Il suffit d'ajouter un talon de la classe par exemple. Ensuite, vous sauriez si cela ne peut tout simplement pas trouver le fichier ou il y a autre chose.
L'erreur se produit car ialertManagement code> n'est lié à aucune classe de béton.
Essayez de lier manuellement
ialertManagement code>.
Cela peut fonctionner mais c'est ce que je voulais m'éloigner de la première place. Je ne veux pas ajouter des références à toutes les DLL avec les classes concrètes.
J'ai fini par résoudre ce problème en ajoutant des références concrètes aux types de résolution de mon projet de test de l'unité. Il suffit d'ajouter des références de projet ne suffit pas. C'est comme ça que je fais cela: