2010-04-27 9 views
7

Problem: montaż SQLite odwoływać w moim zespole DAL nie zostanie skopiowany do folderu wyjściowego podczas wykonywania testów jednostkowych (kopia lokalna jest ustawiona na true).SQLite montaż nie zostały skopiowane do folderu wyjściowego dla testów jednostkowych

Pracuję na aplikacji .Net 3.5 w VS2008, z NHibernate & SQLite w moim DAL. Dostęp do danych jest udostępniany przez interfejs IRepository (fabryka repozytoriów) innym warstwom, więc nie ma potrzeby odwoływania się do zespołów NHibernate lub System.Data.SQLite w innych warstwach.

Do testowania jednostkowego istnieje publiczna metoda fabryczna (również w moim DAL), która tworzy sesję SQLite w pamięci i tworzy nową implementację IRepository. Ma to również na celu uniknięcie wspólnej konfiguracji SQLite w pamięci dla wszystkich złożeń, które tego potrzebują, oraz unikanie odwoływania się do tych wewnętrznych zespołów DAL.

Problem polega na tym, że przeprowadzam testy jednostkowe, które znajdują się w oddzielnym projekcie - jeśli nie dodaję System.Data.SQLite jako odniesienia do projektu testu jednostkowego, nie zostanie on skopiowany do folderu TestResults ... \ Out (chociaż ten projekt odwołuje się do mojego projektu DAL, który odwołuje się do System.Data.SQLite, który ma właściwość Local Copy ustawioną na true), więc testy kończą się niepowodzeniem podczas konfigurowania NHibernate. Jeśli dodaję odwołanie do mojego projektu testowego, to zostanie ono skopiowane, a testy jednostkowe działają.

Co robię źle?

[Aktualizacja]

Wydaje Znalazłem odpowiedź tutaj: TFS UnitTesting not deploying local copy assembly to test dir when on build server. Jeśli dodaję odwołanie do tego typu w jakiejś statycznej metodzie w moim DAL, zostanie ono automatycznie skopiowane, gdy odwołam się do zestawu DAL w moich testach. To wygląda na włamanie, ale IMHO jest czystszym rozwiązaniem niż posiadanie osobnego skryptu, ponieważ tworzy "prawdziwą" zależność.

Wygląda na to, że zostanie również skopiowany, jeśli dodaję zespół SQLite jako dodatkowy element do mojej konfiguracji testu testowego (plik LocalTestRun.testrunconfig).

Dzięki za szybkie odpowiedzi!

Odpowiedz

6

Twój projekt DAL odwołuje się do zestawu System.Data.SQLite, ale to nie znaczy, że zostanie skopiowany do folderu wyjściowego projektu testowego, szczególnie jeśli jest ładowany przy użyciu odbicia przez NHibernate. Szanse są, jeśli spojrzysz na skompilowany zestaw DAL z reflektorem, który nie ma go nawet na liście zestawów referencyjnych, ponieważ nie jest używany bezpośrednio przez kod. Już znalazłeś rozwiązanie, odwołując się do projektu testu jednostkowego.

+0

Lub możesz dodać go do swojego skryptu kompilacji typu Nant lub równoważnego, aby skopiować wymagane zestawy jako etap poprzedzający test. – Gishu

+0

Dzięki, ale naprawdę chciałbym uniknąć odniesienia określonego zestawu danych w moich testach warstwy biznesowej, to po prostu nie jest w porządku. – Groo

+1

Nie martwiłbym się zbytnio o to, jakie zespoły testuje odniesienie. –

1

Można użyć kroku Post-build, aby ręcznie skopiować bibliotekę dll do folderu wyjściowego.

Powiązane problemy