2012-04-19 7 views
5

Se ho qualcosa di simile:come si fa beffe oggetto in un metodo statico

static class ManifestGenerator 
{ 
    public static void GenerateManifestFile(){ 
    var doc = new XDocument(); 
    ... 
    ... xml stuff added to doc 
    ... 
    doc.Save(manifestFilePath) 
} 

Ora può dirmi come posso creare uno unit test che farà in modo che il metodo genera corretto xml? Come posso simulare XDocument (sto usando Moq), senza aggiungere parametri aggiuntivi al metodo di chiamata

risposta

6

Non provare a simulare XDocument. Questo non è il problema qui - è l'accesso al file system che è fastidioso. Si potrebbe passare un Stream scrivere il manifesto, invece:

public static void GenerateManifestFile(Stream output) { 
    var doc = new XDocument(); 
    ... 
    ... xml stuff added to doc 
    ... 
    doc.Save(output); 
} 

Quindi è possibile testare che con un MemoryStream, ma utilizzare un FileStream al percorso manifesta nella realtà. Si potrebbe anche fare questo metodo interno (utilizzando [InternalsVisibleTo] quindi è ancora possibile accedervi da test) e un sovraccarico senza parametri pubblico lungo le linee di:

using (Stream output = File.OpenWrite(manifestFilePath)) 
{ 
    GenerateManifestFile(output); 
} 

È quindi non si prova che codice, ma è possibile prova tutta la tua vera logica.

+0

+1: suddividendolo in 'using'-part in public method + worker interno è davvero un buon consiglio. –

Problemi correlati