2012-04-19 16 views
5

Jeśli mam coś takiego:Jak Ci atrapa obiektu w statycznej metody

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

Teraz możesz mi powiedzieć jak mogę utworzyć badanej jednostki, która zapewni, że metoda generuje prawidłowy XML? Jak mogę sfałszować XDocument (używam Moq), bez dodawania dodatkowych parametrów do wywołania metody

Odpowiedz

6

Nie próbuj kpić z XDocument. Nie stanowi to problemu - jest to denerwujące, ponieważ dostęp do systemu plików. można przekazać w Stream napisać manifest zamiast:

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

Następnie można sprawdzić, z MemoryStream, ale użyć FileStream do manifestu ścieżki w rzeczywistości. Można nawet zrobić z tej metody wewnętrznej (używając [InternalsVisibleTo] więc nadal można do niego dostęp z testów) oraz publicznego przeciążenie bez parametrów wzdłuż linii:

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

wtedy nie przetestować że kod, ale można przetestuj całą swoją prawdziwą logikę.

+0

+1: podzielenie go na "używanie" części w metodzie publicznej + pracownik wewnętrzny to naprawdę dobra wskazówka. –

Powiązane problemy