Podczas tworzenia projektu testu jednostkowego przed wykonaniem testów dane wyjściowe testu są kopiowane do folderu TestResults, a następnie testy są wykonywane. Problem, który mam, polega na tym, że nie wszystkie pliki w katalogu Debug / bin są kopiowane do projektu TestResults.
Jak mogę uzyskać plik, który jest kopiowany do katalogu Debug / bin, aby został również skopiowany do folderu TestResults?
c#
.net
visual-studio-2008
unit-testing
mstest
Eric Schoonover
źródło
źródło
Możesz określić atrybut wdrożenia, jak na przykładzie pokazanym poniżej; Musisz także ustawić właściwości „Treść” i „Kopiuj, jeśli nowszy” (nie ma dokumentacji dotyczącej późniejszych ustawień, ale ustawiłeś je, aby działały.
źródło
Musiałem włączyć opcję „Włącz wdrażanie” w sekcji,
Test -> Edit Test Settings -> Local -> Deployment
aby[DeploymentItem]
atrybut działał.źródło
Wszystkie trzy odpowiedzi są poprawne, w zależności od Twoich potrzeb.
Dodanie plików do wdrożenia w .testrunconfig (.testsettings w VS2010) spowoduje skopiowanie wszystkich tych plików do każdego testowego folderu wyjściowego, nawet w przypadku niepowiązanych testów wykonywanych w izolacji. Jeśli uruchomisz jeden test, wszystkie pliki danych testowych wymienione w sekcji wdrażania pliku .testssettings zostaną skopiowane do folderu wyjściowego testu.
W moich testach muszę skopiować oczekiwany plik XML do folderu wyjściowego testu, aby porównać go z rzeczywistym testowym plikiem XML. Używam atrybutu DeploymentItem tylko do kopiowania pliku XML związanego z uruchamianymi testami. W VS2010 musiałem włączyć wdrażanie w pliku .testsettings (ale nie dodawać żadnych ścieżek), a następnie odwołać się do ścieżki pliku XML względem TestProject w DeploymentItem.
Mam nadzieję że to pomoże.
źródło
Miałem podobny problem, ale mój dotyczył wskazania pliku TraceAndTestImpact.testsettings zamiast pliku Local.testsettings. Możesz zmienić jeden na drugi w menu Test / Wybierz ustawienia aktywnego testu.
źródło
Chciałbym po prostu ulepszyć zaakceptowaną odpowiedź, wspominając o sposobie, w jaki można ją wdrożyć specjalnie dla dll, zamiast normalnej metody używania jej do danych lub konfiguracji itp., W sytuacjach, w których CopyLocal nie działa:
źródło
Poniższe działa w VS2012 dla projektów testowych zawartych w wielu rozwiązaniach bez użycia pliku ustawień testowych:
1) Ułóż pliki i foldery, które chcesz wdrożyć, w folderze w katalogu projektu testowego.
2) We właściwościach projektu utwórz krok po kompilacji
$(ProjectDir)
i$(TargetDir)
są to makra, które będą interpretowane przez VS i jako takie powinny być uwzględnione.<Project_Folder_Name>
to nazwa folderu utworzonego w kroku 1.<Deployment_Folder_Name>
to nazwa folderu, w którym zostaną wdrożone pliki testowe, i powinna zostać nazwana tak, aby była unikalna, gdy wiele projektów testowych jest wdrażanych w tym samym katalogu, np<Project_Name>_TestInputs
.Pliki testowe w udostępnionych lokalizacjach należy również skopiować do folderu wdrażania katalogu docelowego, aby ograniczyć interakcje testowe. Podaj ścieżkę źródłową względem
$(ProjectDir)
makra. Na przykład"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"
.3) Dodaj
[DeploymentItem(source, destination)]
właściwość do każdej metody testowej, która używa pliku wdrożenia (najlepsze rozwiązanie) lub do klasy testowej (łatwiejsza praktyka dla leniwych lub spieszących się, a najłatwiejszy sposób zaktualizowania projektu poprzednio używane ścieżki względne lub plik ustawień testowych ).W metodzie testowej
source
jest ścieżką do pliku lub katalogu używanego w metodzie testowej względem katalogu docelowego utworzonego przezxcopy
idestination
jest ścieżką do katalogu, w którym zostanie utworzony, względem katalogu wdrażania. Aby testy działały spójnie w katalogu docelowym lub w katalogu wdrożeniowym. Ścieżka docelowa powinna być taka sama jak ścieżka źródłowa bez odwołania do pliku. Przykład:[DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]
.DeploymentItem
Powinny być zawarte w każdej metodzie, która wykorzystuje ten plik lub katalog.W klasie
source
idestination
oba są nazwą folderu utworzonego w katalogu docelowym przezxcopy
; spowoduje to skopiowanie całego folderu do katalogu wdrożeniowego po uruchomieniu dowolnego testu w klasie. Przykład:[DeploymentItem("Example_TestInputs","Example_TestInputs")]
4) W metodach testowych możesz teraz uzyskiwać dostęp do plików i katalogów z pewnością, że będą one w katalogu roboczym niezależnie od tego, gdzie Visual Studio zdecydowało się to umieścić tego dnia, np
File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")
.źródło
Wypróbuj wiersz polecenia zdarzenia po kompilacji z poziomu programu Visual Studio (jeśli używasz tego środowiska IDE).
źródło
W programie Visual Studio 2012 nie potrzebujesz atrybutu DeploymentItem dla prostego przypadku. Zobacz moją odpowiedź tutaj
źródło
źródło
Przyjęta odpowiedź jest poprawna, podobnie jak większość pozostałych odpowiedzi. Jednak przez lata odkryłem, że system Deploment testów jednostkowych programu Visual Studio przy użyciu DeploymentAttribtue i Copy to Output jest uciążliwy, jeśli masz dużą liczbę plików danych. Zauważyłem, że przechowywanie plików w ich pierwotnej lokalizacji działa lepiej.
Pełne szczegóły w mojej drugiej odpowiedzi tutaj. https://stackoverflow.com/a/53004985/2989655
Mam nadzieję że to pomoże.
źródło