2010-09-20 7 views
4

Je construis un service WCF qui reçoit des requêtes sur une adresse IP externe et les traduit en messages qui sont envoyés via NServiceBus.Comment Test I Unité NServiceBus.Configure.WithWeb()?

Un de mes tests unitaires Global.Application_Start() invoque, qui effectue la configuration de l'application, puis tente de résoudre le service Web pour vérifier que le conteneur peut construire toutes les dépendances.

Cela fonctionne bien lorsque j'utilise Configure.With() dans mes services Windows, mais l'appel à Configure.WithWeb() échoue dans ce contexte (probablement parce que le « bin » répertoire n'existe pas?).

Est-il possible de tester l'unité une méthode qui appelle Configure.WithWeb(), ou devrais-je simplement utiliser la surcharge pour Configure.With() qui prend un nom de répertoire?

+0

Cela dépend de la complexité que vous souhaitez obtenir, mais vous pouvez enrouler une interface/classe BootStrapper générique autour de l'appel et l'échanger en fonction du contexte actuel. –

+0

Je suis confronté à ce même problème. L'exception que j'obtiens est la suivante: ArgumentNullException à System.IO.DirectoryInfo..ctor (chemin d'accès chaîne) à NServiceBus.Configure.GetAssembliesInDirectoryWithExtension (String path, String extension, String [] assembliesToSkip) dans Configure.cs: ligne 226 dans NServiceBus.Configure. d__7.MoveNext() dans Configure.cs: ligne 217 – ssmith

Répondre

0

J'ai créé une nouvelle startup classe comme ceci:

public class NonWebRunAtStartup : IRunAtStartup 
{ 
    public void InitializeInfrastructure(object container) 
    { 
     Configure.With() 
      .StructureMapBuilder((IContainer) container) 
      .Log4Net() 
      .XmlSerializer() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 
    } 
} 

Puis dans mon test, je me suis assuré que mon conteneur du CIO utiliserait celui-ci au lieu de l'habituel sur le Web un en ajoutant à mon essai:

IoC.Register<IRunAtStartup, NonWebRunAtStartup>(); 

Cela m'a fait une autre erreur, que je suis toujours se battre avec, que je vais poser une question distincte (maintenant NSB ne peut pas charger les assemblages qui sont NServiceBus.Core.dll, tels comme Antlr3.Runtime.dll).

+0

C'est la même solution que j'ai finalement rejetée; depuis que je suis en train de tester le démarrage réel, il ne fait pas beaucoup de sens pour créer une méthode de démarrage séparée où le test a été le seul endroit où il serait appelé. – arootbeer

+0

Oui, je suis d'accord que la duplication n'est pas idéale. Malheureusement, c'est le meilleur que je puisse trouver (et ça marche, tant que les deux classes de démarrage restent synchronisées, mais c'est un processus manuel) – ssmith