2012-05-23 8 views
7

Piszę niektóre testy xUnit dla niektórych klas pomocniczych, które opierają się na niektórych ustawieniach konfiguracji, zwykle przechowywane w App.config lub Web.config projektu wykonawczego.App.config dla Xunit

config wygląda następująco:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="FileNamePattern" value="\\d{8}_\\w{4:20}\.png"/> 
    <!-- and the likes --> 
    </appSettings> 
</configuration> 

biegnę xUnit 1.9 z prowadnicą (GUI) i xUnit xunit.gui.clr4.exe biegacza konsoli (na serwerze Jenkins CI). Obecnie mogę "wstrzyknąć" te wartości konfiguracyjne do środowisk testowych, ręcznie konfigurując pliki xunit.gui.clr4.exe.config i xunit.console.exe.config; jest to jednak nużące i podatne na błędy.

Mogłem także sfałszować te ustawienia konfiguracji w urządzeniu. Ale używanie tego samego urządzenia w 10 różnych plikach jest raczej powtarzalne.

Czy istnieje lepszy sposób na sfałszowanie tych ustawień konfiguracyjnych za pomocą narzędzia xUnit, na przykład dostarczenie pliku App.config do projektu testowego?

+1

Utworzę pośrednie ISettings. Możesz załadować app.config do tego. Wszystko, co musisz zrobić, to wyłudzić interfejs za pomocą frameworka takiego jak Moq. Bardzo lubię abstrakcyjne pliki konfiguracyjne jak najwięcej. –

Odpowiedz

10

Jeśli kod zakłada, że ​​są w app.config, następnie xUnit.net obsługuje ich posiadania przewodowego się tam poprzez zapewnienie jednego (zazwyczaj, gdy testy są w pliku DLL, oznacza to dostaniesz plik AssemblyName.dll.config w wyjściach projektowych który biegacz ładuje jako ustawienia, jeśli istnieje w czasie ładowania).

Oczywiście nie zaszkodzi użyć zasady DI, aby usunąć takie zależności, ale powiedziałbym, żeby nie wdawać się w kłamstwa z kodem przed faktycznym poddaniem go testowi.

Aby zachować SUCHOŚĆ, umieść plik app.config w centralnym miejscu i dodaj go jako łącze (za pomocą strzałki w przycisku Otwórz w oknie dialogowym). (Tak, jest mnóstwo nie lubi o tym. - używać tylko wtedy, gdy czujesz jego najmniejsze zło podejście)


Jedną rzeczą, aby zwrócić uwagę na to, że zmiany nie dostać przeładowane w biegacza GUI chyba że poprosić o ponowne załadowanie zespołu.

+0

Konfiguracja działa dobrze, gdy zmieniłem jej nazwę na TestNamespace.dll.config i ustawiłem ją tak, aby zawsze kopiowała do katalogu budowania. Dzięki! –

+0

@ThachMai Byłbym zaskoczony, gdyby pozostawienie go jako app.config nie działało automatycznie - ja osobiście zawsze jestem podejrzliwy, ale nigdy nie znalazłem przypadku, w którym system kompilacji nie był faktycznie zapisany w kopii/zmianie nazwy - włącz logowanie msbuild i spójrz (pamiętaj, że nie zostanie odebrany aż do przeładowania). –

+0

Wypróbuję to i skontaktuję się z Tobą w najbliższy wtorek, kiedy będę miał dostęp do źródła. –