2009-07-22 16 views
7

Szukam odniesienia do mojego pliku bazy danych w moim projekcie testu jednostkowego. To jest aplikacja ASP.NET MVC.Ciąg połączenia w projekcie testowym jednostki do odwołania do bazy danych w folderze app_data

Uwaga: Wiem, że nie powinienem mieć dostępu do bazy danych w testach jednostkowych, ale jest to szybkie sprawdzenie jednego testu, który muszę teraz zdać.

Po kolejnym kamieniem milowym będę wyśmianie metody dostępu do bazy danych itp

Więc tutaj jest mój ciąg połączenia w moim config mvc app WWW i plików ap.config testów jednostka

<add name="DBConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB.MDF;Integrated Security=True;User Instance=True" 
    providerName="System.Data.SqlClient" /> 

Kiedy biegnę testu pojawia się błąd:

Test method 
ED.Tests.Controllers.CandidateControllerTest.PersonalDetailsStepPostShouldRedisplayIfNoSurnameSupplied 
threw exception: System.Data.SqlClient.SqlException: 
An attempt to attach an auto-named database for file C:\Users\Desktop\ED\TestResults\LAPTOP-D 2009-07-22 18_16_20\Out\DB.MDF failed. 
A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 

wydaje mi się, że ciąg połączenia jest źle, ale nie jestem pewien jak ustawić ścieżkę prawidłowo. Próbowałem dodać \ .. \ .. i nazwy katalogów itp.

+0

Czy to jest MSTest? –

+0

To jest domyślne, że pochodzi z VS2008, więc myślę, że tak. – ddd

Odpowiedz

4

MSTest uruchomi zestaw testów jednostkowych w zupełnie innym folderze przy każdym uruchomieniu testowym. Chodzi o to, że każdy bieg jest całkowicie izolowanym przypadkiem z poprzednich i kolejnych serii. To naprawdę rodzaj bólu powiedzieć, aby skopiować pliki danych wraz z resztą aplikacji. Musisz kliknąć prawym przyciskiem myszy na swoje rozwiązanie (nie swój projekt), wybrać opcję Dodaj, utworzyć nową konfigurację uruchamiania testowego. Następnie musisz edytować konfigurację uruchamiania testowego i określić, które pliki zostaną skopiowane do folderu wykonywania testu. Powinien istnieć katalog rodzeństwa do katalogu rozwiązania o nazwie TestResults, który zawiera foldery używane podczas każdego uruchomienia testowego.

+0

Tak, zauważyłem różne foldery wyjściowe. Dziękuję, to sprawiło, że mój dzień, teraz do łóżka;) – ddd

1

Komentarz do odpowiedzi Craiga: Nie powinno być problemu z wdrożeniem dodatkowych plików danych do wykonania testów jednostkowych. Możesz użyć DeploymentItemAttribute (Microsoft.VisualStudio.TestTools.UnitTesting) na poziomie klasy lub metody, aby określić, które pliki należy skopiować przed uruchomieniem tych testów.

+0

Dzięki za skierowanie mnie w tym kierunku. Powinno to być: [DeploymentItem ("connectionstrings.config")] –

2

można po prostu odwołać localdb tak:

<add name="DefaultConnection" 
connectionString="Server=(localdb)\v11.0;Database=WebPortalDb" providerName="System.Data.SqlClient"/> 

gdzie WebPortalDb to nazwa bazy danych.

0

Najlepszą odpowiedzią jest nie łączenie się z bazą danych w ogóle z niektórymi testami jednostkowymi, a zamiast tego żartowanie z bazy danych. Jednak może zajść potrzeba refaktoryzacji istniejącego kodu MVC, aby dostać się do punktu, w którym MOŻESZ sfałszować zależność od bazy danych, i nie powinieneś nigdy tego zmieniać, dopóki twój kod nie zostanie zawarty w niektórych testach. Tak więc w tej sytuacji, tak - prawdopodobnie będziesz musiał połączyć swój projekt testowy z bazą danych, przynajmniej na chwilę, aż oddzielisz wszystko na tyle, by umożliwić kpiny.

Tak więc w moim przykładzie użyłem ASP.Net MVC 5. To oznaczało, że mogłem uzyskać niezbędną konfigurację Entity Framework dodaną do pliku app.config projektu testowego projektu po prostu klikając prawym przyciskiem myszy na plik Solution, zarządzając NuGet dla Rozwiązanie i dodanie EF do projektu testowego.

następnie dodając ciąg połączenia z głównym pliku Web.config projektu MVC za PRAWIE pracował, z niewielkim uszczypnąć że musiałem usunąć ostatnią część napisu, który powiedział:

AttachDbFilename=|DataDirectory|<<MY_DATABASE_NAME_AND_ID>>.mdf 

jak ja Mówiąc, tworzenie testów "Unit", które łączą się z bazą danych, nie jest drogą do zrobienia, więc będzie to tylko środek tymczasowy.Ale kod wymaga refaktoryzacji, aby doprowadzić do stanu, w którym się znajduje, i (s) ten, kto refaktoryzuje bez przynajmniej kilku testów, aby udowodnić, że refaktoryzacja nie złamał wszystkiego, wszystko toczy się o siniaki.

Powiązane problemy