2014-07-01 4 views
10

J'ai une question sur l'unité testant la méthode Main d'une application de console. La signature standard estTest d'unité C# (Nunit) Méthode principale d'une application de console?

public static void Main(string[] args) 

Je veux être en mesure de tester pour assurer que seulement 1 paramètre est passé. Si plus d'un paramètre est passé dans ce que je veux l'échec du test.

Je ne pense pas que je peux me moquer de cela avec MOQ comme c'est une méthode statique.

Quelqu'un a-t-il de l'expérience?

Des idées?

Merci

+0

Pourquoi auriez-vous besoin de moquer? A-t-il des dépendances qui ne peuvent pas être appelées? –

+0

L'entrée doit être vérifiée lors de l'exécution dans votre méthode principale. Pourquoi est-ce crucial pour votre test unitaire? – SBI

+0

Juste une note pour les futurs lecteurs: La signature peut être changée en 'static int Main' et j'utilise parfois ce signal de retour pour créer des tests unitaires – Simeon

Répondre

18

Il n'y a rien à se moquer dans votre scénario. La statique Program.Main est une méthode comme les autres et vous la testez en l'invoquant. Le problème avec la méthode static void est que vous pouvez seulement vérifier s'il déclenche une exception ou interagit avec un argument d'entrée (ou d'autres membres statiques, éventuellement). Comme il n'y a rien à interagir avec string[], vous pouvez tester le cas précédent.

Cependant, une approche plus saine consiste à déléguer toute la logique contenue dans Main pour séparer le composant et le tester à la place. Non seulement cela vous permet de tester votre logique de traitement des arguments d'entrée à fond, mais simplifie également Main à plus ou moins ceci:

public static void Main(string[] args) 
{ 
    var bootstrapper = new Bootstrapper(); 
    bootstrapper.Start(args); 
}