2013-02-14 11 views
5

Pracuję z XDocument w aplikacji interfejsu API MVC4 Web w Visual Studio 2010 i nie jestem pewien co do strategii testowania.Metoda testowania dla XDocument.Load() i XDocument.Save()

Większość moich testów jednostkowych korzysta z pamięci XDocument, która sprawdza się w kontrolach, usługach, testach repozytoriów.

Jednak mam scenariusze XDocument.Load(filename) i XDocument.Save (nazwa pliku), które chciałbym przetestować (z testami jednostkowymi lub integracyjnymi).

Szukałem następującego pytania \ odpowiedź na SO here, ale nie jestem pewien, jak postępować.

public class PathProvider 
{ 
    public virtual string GetPath() 
    { 
     return HttpContext.Current.Server.MapPath("App_Data/policies.xml") 
    } 
} 

PathProvider pathProvider = new PathProvider(); 
XDocument xdoc = XDocument.Load(pathProvider.GetPath()); 

Tak, mam, że mogę teraz makiety do połączenia co nazywa XDocument.Load (pathProvider.GetPath()).

Czy powinienem spróbować przetestować działanie PathProvider? Jeśli, więc, jak mam się do tego zbliżyć?

Dzięki

Davy

+0

Możesz kpić z połączeń z XDocument.Load' using [MS Fakes] (http://msdn.microsoft.com/en-us/library/hh549175.aspx). –

+0

Dzięki, powinienem był powiedzieć, że używam VS 2010 i nie mogę uaktualnić. Wierzę, że Fakes nie działają w 2010 roku. – davy

+0

Możesz użyć poprzednika [Moles] (http://research.microsoft.com/en-us/projects/moles/) –

Odpowiedz

2

powinienem być następnie próbuje przetestować że dzieła PathProvider? Jeśli, więc, jak mam się do tego zbliżyć?

Moja odpowiedź brzmi: nie, przynajmniej nie za pomocą automatycznego testu na początek.

Po prostu z powodu podanego fragmentu kodu PathProvider jest opakowaniem (adapterem) wokół środowiska ASP.NET. Jedyne testy, na których mogę polegać, to testy współpracy, np. Weryfikuję, że funkcja GetPath() jest wywoływana, gdy jej oczekujesz. W związku z tym kontekst jest tutaj kluczowy.

PathProvider pathProvider = new PathProvider(); 
XDocument xdoc = XDocument.Load(pathProvider.GetPath()); 

Powyższy kod oznacza "testowanie szkieletu", dlatego też nie zadałbym sobie nawet trudu, aby przetestować taki kod. Jeśli naprawdę chciałeś się upewnić, że ta część kodu zrobiła właściwą rzecz z plikami XML i tak dalej, powrócę do testu integracji. Chociaż uważam, że to może być powolne i kruche.

Moje rozwiązanie polegałoby zatem na abstrakcji pojęcia dokumentu XML, który został załadowany, tak jak w przypadku PathProvider. Stąd wystarczyłoby ręczne testowanie. Po drodze, jeśli w takich adapterach jest jakakolwiek logika domenowa, wyodrębniam klasy/metody, które można testować oddzielnie, bez potrzeby martwienia się o ładowanie dokumentów lub dokumentów XML itd.

Powiązane problemy