2013-06-06 13 views
15

Mam aplikację konsoli C#. Jedną z jego funkcji jest odczytanie wartości i wykonanie pewnej pracy.nie można odczytać ustawień aplikacji podczas testowania urządzenia

string host = ConfigurationManager.AppSettings["Host"] 

Więc napisałem test NUNIT dla mojej aplikacji konsolowej. Projekt testowania jednostek został utworzony przy użyciu biblioteki klas.

Ale moja próba jednostki kończy się niepowodzeniem. Ponieważ nie odczytuje moich ustawień aplikacji (nie wskazuje ustawień aplikacji). Jaki jest tego powód.
Po uruchomieniu aplikacji konsolowej odczytuję ustawienia aplikacji poprawnie.

Odpowiedz

29

Powinieneś mieć app.config stworzony dla twojego projektu testu jednostki. Plik app.config aplikacji konsoli nie będzie sprawdzany podczas testów jednostkowych.

+3

Oznacza to, że muszę dodać następujące do mojego projektu badawczego, jak również. ' ' –

+0

Tak, masz rację – aquaraga

+0

Udało się. Nigdy o tym nie wiedziałem. Dzięki za pomoc –

11

Chociaż można zdefiniować ustawienia aplikacji w innym pliku konfiguracyjnym dla projektu testu jednostkowego, testowanie urządzenia na interfejsach za pomocą wtrysku zależności może pomóc w rozbiciu obszarów, które testy jednostki będą pokrywać w łatwiejsze do zarządzania części.

Więc można mieć swój interfejs konfiguracyjny jak:

public interface IConfiguration 
{ 
    public string Host { get; set; } 
} 

klasa przetestować przyjąłby klasę IConfiguration jako parametr (zwykle do konstruktora) tak:

public class MyClass 
{ 
    IConfiguration _config; 
    public MyClass(IConfiguration config) 
    { 
     _config = config; 
    } 

    public void MyMethodToTest() 
    { 
    } 
} 

wówczas test może używać interfejsu do przekazywania w konfiguracji, a nie w zależności od zewnętrznego pliku konfiguracyjnego, który może potencjalnie zmienić i wpłynąć na test jednostki:

[Test] 
public void Testing_MyMethodToTest() 
{ 
    // arrange 
    var config = new Configuration { Host = "My Test Host" }; 
    // act 
    new MyClass(config).MyMethodToTest(); 
    // Add assertion for unit test 
} 

A rzeczywista realizacja będzie utworzyć klasę konfiguracji, załadować go z wartością (ów) od AppSettings i przekazać, że w implementacji

+0

Jednak jego implementacja będzie nadal wymagać załadowania w jego konfiguracji z ustawień aplikacji w projekcie testowym. –

+0

Dodano przykład tego, jak napisać test, który nie wymagałby ustawień aplikacji – boniestlawyer

Powiązane problemy