2014-07-01 10 views
10

Ho una domanda sull'unità che verifica il metodo principale di un'app console. La firma standard èC# Unit Testing (Nunit) il metodo principale di un'app console?

public static void Main(string[] args) 

voglio essere in grado di testare per garantire che solo 1 parametro viene passato. Se più di un parametro viene passato che voglio il fallimento del test.

Non penso di poter prendere in giro questo con MOQ come metodo statico.

Qualcuno ha qualche esperienza in questo?

Qualche idea?

Grazie

+0

Perché si deve prendere in giro vero? Ha delle dipendenze che non possono essere chiamate? –

+0

L'input deve essere controllato in fase di esecuzione all'interno del metodo principale. Perché questo è cruciale per il tuo test unitario? – SBI

+0

Solo una nota per i futuri lettori: la firma può essere cambiata in 'static int Main' e talvolta uso il segnale di ritorno per creare test unitari – Simeon

risposta

18

Non c'è niente da deridere nel tuo scenario. Statico Program.Main è un metodo come qualsiasi altro e lo si verifica come tale - invocandolo.

Il problema con il metodo static void è che è possibile verificare solo se genera un'eccezione o interagisce con l'argomento di input (o altri membri statici, eventualmente). Poiché non c'è nulla con cui interagire su string[] puoi testare il caso precedente.

Tuttavia, un approccio più suono è delegare tutti logica contenuta in Main per separare componenti e testare invece. Non solo questo permette di testare a fondo la logica di gestione degli argomenti di ingresso ma anche semplifica Main a più o meno questo:

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