fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

Testy jednostkowe z R# a pliki zewnętrzne, czyli problem z shadow copying


28.01.2010

Niekiedy test jednostkowy sprawdza poprawność jakiegoś skomplikowanego algorytmu bądź parsera tekstu bądź czegokolwiek, co wymaga znacznych ilości danych. Zamiast umieszczać te dane w kodzie, niejednokrotnie wygodniej jest po prostu wrzucić je do pliku, plik dodać do projektu i ustawić jego właściwość “Copy to Output Directory” na Always. W normalnej sytuacji pobralibyśmy dane o tak:

  1:  string filePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"TestData\" + fileName);

I w niektórych scenariuszach testowych takie coś zadziała. Problem jednak pojawi się na przykład w przypadku Resharpera gdy zaznaczona będzie poniższa opcja:

Uzyskamy podobny temu komunikat: “System.IO.DirectoryNotFoundException: Could not find a part of the path ‘C:\Documents and Settings\User\Local Settings\Application Data\assembly\dl3\Y1J1R0E5.5EQ\ZPW5QAC9.MPO\836998ac\10edf95d_6f94ca01\TestData\data.txt“. W tej sytuacji właściwość Location nie zwróci tego co oczekujemy.

Więcej w tym temacie na MSDN w artykule “Shadow Copying Assemblies“.

Ale jak temu zaradzić? Wyłączenie tej opcji nie może być jedynym wyjściem.

I nie jest. Lokalizację źródłowego assembly na dysku uzyskamy za pomocą takiej metody:

  1:  public static string GetAbsoluteTestLocation()
  2:  {
  3:  	string codeBaseLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
  4:  	return new Uri(codeBaseLocation).AbsolutePath;
  5:  }

I testy znowu działają…

  1:  string filePath = Path.Combine(PathUtil.GetAbsoluteTestLocation(), @"TestData\" + fileName);

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Zapisując się na newsletter zgadzasz się na przetwarzanie Twoich danych osobowych w celu wysyłania na wskazany przez Ciebie adres e-mail informacji handlowych o nowościach, promocjach, produktach i usługach związanych z serwisem devstyle.pl. Będzie to marketing bezpośredni, do realizacji którego wykorzystam Twoje telekomunikacyjne urządzenia końcowe. Administratorem Twoich danych osobowych będzie Maciej Aniserowicz prowadzący działalność gospodarczą w Białymstoku (15-215) przy ul. Konopnickiej 14/8, NIP 5422824401. Przysługuje Tobie prawo do cofnięcia zgody, żądania wglądu do Twoich danych, wniesienia sprzeciwu co do ich przetwarzania, sprostowania, usunięcia i ograniczenia przetwarzania. Więcej informacji o tym jak przetwarzam Twoje dane znajdziesz na devstyle.pl/RODO. Powered by ConvertKit

Comments are closed.

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Facebook

Książka

Zobacz również