2009-10-21 9 views
2

J'ai trois projets dans ma solution:Est-ce que log4net tue mes tests unitaires WCF?

  • Un service Web WCF qui fournit des fonctionnalités que je veux tester
  • une application Web qui demande que le service Web
  • Un projet de test qui exécute des tests sur le service .

Le service Web et l'application Web à la fois l'utilisation log4net avec des fichiers de configuration distincts et cette ligne dans les AssemblyInfo.cs pour la configuration:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

Lorsque je navigue à l'URL du service Web (http://localhost/MyWebService/MyWebService.svc), Il apparaît comme prévu - information et un lien vers le wsdl. Lorsque j'utilise l'application Web, tout fonctionne correctement. Le code appelle le service Web et obtient les réponses correctes en réponse. La journalisation se produit à la fois à partir de l'application Web et du service Web.

Cependant, quand je lance mes tests unitaires, ils sont tous échouent à l'exception suivante:

Test method MyServiceTest.MyServiceAuthTest.TestValidateCorrectly threw exception: System.ServiceModel.ServiceActivationException: The requested service, 'http://localhost/MyWebService/MyWebService.svc' could not be activated. See the server's diagnostic trace logs for more information.

Dans les journaux d'événements pour ma machine locale, je reçois le message suivant:

WebHost failed to process a request. Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/12905972 Exception: System.ServiceModel.ServiceActivationException: The service '/MyWebService/MyWebService.svc' cannot be activated due to an exception during compilation. The exception message is: Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045).

J'ai supprimé et remplacé les références, nettoyé et reconstruit, et même purgé les fichiers temporaires asp.net, en vain. Le site Web appelle le service sans problème, mais les tests échouent.

Est-ce que quelqu'un sait ce qui pourrait se passer ici?

Mise à jour: J'ai supprimé toutes les références à log4net et les tests ont été exécutés et ont réussi sans problème. Évidemment, c'est loin d'être préférable. Aucune suggestion?

Mise à jour 2: Une combinaison de ces deux choses a résolu le problème:

  • Ajout d'une référence à log4net dans mon projet de test, en veillant à initialiser complètement.
  • Utilisé la version release de log4net 1.2.10 plutôt que la version de débogage.

Répondre

3

Avez-vous une référence de votre test unitaire à la bibliothèque log4net? Essaye le. La raison derrière ceci: La plupart des frameworks de tests unitaires observent les binaires à un autre endroit pendant l'exécution du test, mais en faisant cela, ils ne trouvent pas de références profondément imbriquées dans tous les cas. Une fois, j'ai rencontré cela avec NHibernate et log4net. Dans le cas de MSTest, vous ne pouvez pas désactiver l'observation. NUnit GUI a une option pour cela, mais je ne l'ai pas installé, donc vous devez le rechercher par vous-même :-)

+0

Ceci est une bonne explication. Une autre solution consiste à utiliser d'autres moyens pour configurer log4net. Par exemple, en chargeant le fichier de configuration dans le code à la place, et c'est ce que je préfère car cela vous permet de gérer le fichier manquant des cas exceptionnels. –

+0

Pour être honnête, je pense que je l'ai fait sans succès. Je suis à la maison en ce moment, mais j'y retournerai certainement quand je retournerai au travail. J'ai peut-être manqué une étape à un certain moment ... – Damovisa

+0

Pas tout à fait sûr de ce qui a résolu le problème, mais cela a certainement aidé. J'ai ajouté des références au projet de test et l'ai instancié dans init, mais il a quand même échoué. J'ai supprimé la référence au débogage de log2net et l'ai remplacé par une version de version et tout a fonctionné. La version 1.2.10 en passant ... – Damovisa

0

Je considérerais également d'ajouter la gestion de log4net dans votre configuration de tests unitaires. C'est très utile quand on regarde les échecs de toute façon.
Cette link l'explique pour NUNit et devrait aussi être possible pour d'autres frameworks.