23

Visual Studio utworzyło dla mnie test jednostkowy oparty na metodzie (kliknij prawym przyciskiem myszy dodaj test). Kiedy próbuję uzyskać dostęp do bazy danych, otrzymuję wyjątek. Ran ten kod, aby zobaczyć, co było moja gra:Testowanie - brak ciągu połączenia

ConnectionStringSettings connStringSettings = ConfigurationManager. 
    ConnectionStrings["myConnectionString"]; 

ale connStringSettings jest null. Podczas inspekcji kolekcja ConnectionStrings ma licznik tylko jednego. Wygląda na to, że nie czyta się z mojego pliku web.config.

Mój DAL jest izolowany i nie można ustawić jego kodu połączenia za pomocą kodu. Jego ciąg połączenia jest ustawiony w następujący sposób:

set 
{ 
    value = System.Configuration.ConfigurationManager. 
     ConnectionStrings["myConnectionString"].ConnectionString; 
} 

Jak mogę rozwiązać ten problem?

+0

Jeśli korzystasz z bazy danych, nie testujesz urządzenia, testujesz integracje. W przypadku testu jednostkowego powinieneś wyłudzić warstwę dostępu do danych, w którym to czasie aspekt połączenia nie ma znaczenia. –

+0

@DBM - Dobra uwaga. Zaktualizowałem tagi i tytuł. –

Odpowiedz

51

Dodaj plik App.config do projektu testowania urządzenia i skopiuj ciąg połączenia z Web.config.

+1

Czy to wciąż jedyne możliwe rozwiązanie (nie znalazłem dotąd niczego, co mogłoby inaczej), ale i tak nie znalazłem ani jednego). Co się stanie, jeśli wezmę swój ciąg połączenia? Muszę się upewnić, że to się zmieniło również w projekcie testowym? – Trent

+0

Tak - przepraszam, ale jeśli twój ciąg połączenia jest już automatycznie zapakowany przez klasę testową, nic nie możesz z tym zrobić. Jeśli istnieje przeciążenie dla konstruktora DAL, które można utworzyć za pomocą ciągu połączenia klienta, można po prostu umieścić ciąg w tym konstruktorze. Niestety, jeśli musisz zmienić ciąg połączenia, będziesz musiał ręcznie zrobić to w obu projektach. Ostatecznie jednak ostateczną odpowiedzią jest to, że testy jednostkowe naprawdę * nie powinny * mieć dostępu do baz danych, więc ciąg połączenia nie powinien być w ogóle potrzebny. – eouw0o83hf

+0

W jaki sposób sprawdzasz swoje zapytania, jeśli nie masz dostępu do bazy danych? – Trent

5

Dodaj ciąg połączenia w pliku app.config testu urządzenia. Projekt testu jednostkowego nie będzie miał dostępu do konfiguracji sieci web twojego projektu.

6

To zadziałało dla mnie. Dodałem plik App.config do projektu testów jednostkowych. Ale upewnij się, że będziemy podążać za synatxem, inaczej wyrzuci wyjątek.

<connectionStrings> 

    <add name="test" connectionString="" providerName="System.Data.SqlClient" /> 

    <add name="db" connectionString=""" providerName="System.Data.SqlClient"/> 

</connectionStrings> 

-3

Innym rozwiązaniem jest, aby przejść do stron własności rozwiązanie (Roztwór podstawowy> Właściwości)

Startup Project - sprawdź pojedynczy projekt startowy jest jednym z config.

Wybierz, ok - gotowe.

Powiązane problemy