2010-07-30 10 views
5

Walczę o to, aby druty działały, dla odmiany i zastanawiałem się, gdzie ludzie zazwyczaj umieszczają swoje fałszywe klasy. Wydaje mi się, że mam trzy podstawowe wybory, z których żaden nie działa.Gdzie mogę umieścić moje drwiny?

Mogę umieścić je w samym zestawie aplikacji, w którym to przypadku wysyłają aplikację, co wydaje się złe, ale są one dostępne do testów jednostkowych podczas ostatecznych kompilacji i nie ma odwołań kołowych. To wydaje się najprostsze podejście.

Potrafię utworzyć osobny zestaw próbny, dzięki czemu są one dostępne podczas testów jednostkowych, mogą być pobierane z aplikacji i aplikacji testowej, ale w efekcie muszę przenieść wszystkie rzeczywiste typy do tego zespołu lub tworzenie odwołań cyklicznych.

Mogę umieścić je w zespole testowym, ale nie można ich użyć z poziomu samej aplikacji i dlatego nie mogę ich używać jako procesu do budowania fragmentów aplikacji.

Staram się wykorzystywać makiety do pomocy przy opracowywaniu systemu, a także do testowania części, dlatego trudno mi określić, gdzie je umieścić. Dodatkowo wszystkie ostateczne wydania kodu muszą przebiegać przez procesy testów jednostkowych, dlatego potrzebuję makiet dostępnych podczas cyklu kompilacji.

Czy ktoś ma jakiekolwiek przemyślenia na temat tego, gdzie powinny znajdować się pozorowane klasy?

dzięki za wszelką pomoc T

+0

Sprawdź atrybut zespołu "InternalsVisibleTo'; poprawi to twoje opcje: http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx – Flynn1179

+0

"Staram się wykorzystywać makiety do pomocy w opracowaniu systemu" - to wydaje się dziwne. Z pewnością dana klasa jest albo częścią aplikacji, albo częścią testów; ale nie jedno i drugie. –

+0

@Flynn Już korzystam z tych podziękowań. @Tim - Może to jest, gdzie idę źle. Po prostu wielka szkoda, że ​​zawsze muszę rozmawiać przez wiele warstw, aby rozwinąć mój system, kiedy mam te wspaniałe makiety, które tylko czekają, aby je wykorzystać. Czy uważasz, że wszystkie twoje warstwy systemu są już zakodowane, zanim zaczniesz pracować z przodu? – Tollo

Odpowiedz

10

Twoje mocks powinien iść w projektach testów jednostkowych. Twoja aplikacja nie powinna być zależna od twoich fałszywych obiektów. Zasadniczo twoja aplikacja będzie używać interfejsów, a twoje makiety będą implementować te interfejsy. Twoja aplikacja nie musi lub powinna odnosić się do Twojego projektu testowego.

+1

Więc nigdy nie używałbyś swoich mocków do przyspieszenia i pracy z aplikacją? Zacząłem od posiadania ich w jednostkowym projekcie testowym, ale wydawało mi się to ogromnym marnotrawstwem, jeśli moja aplikacja zawsze musiała rozmawiać z powrotem do mojego końca, podczas gdy wszystkie te doskonale działające makiety zaczęły wzywać do użycia. – Tollo

+0

"Więc nigdy nie używałbyś swoich mocków, aby przyspieszyć pracę z aplikacją?" Nie; zachowaj kod testowy poza aplikacją. Oprócz makiet, masz również kod testowania jednostkowego: czy to jest wołanie do użycia? –

+0

Przepraszam za duplikat między dwoma komentarzami, ale ... Kluczową różnicą między kodem testowania jednostki i mockami jest to, że mój front end musi wykorzystywać jakąś formę usług zaplecza i klas głównie zanim inne warstwy programistów mają zakończono kodowanie. W moim projekcie testowym mam już cudowny zestaw meczy, więc po prostu wydaje się wielkim wstydem, że nie można ich użyć. Czy uważasz, że wszystkie warstwy pod tobą są już zakodowane, zanim zaczniesz pracować z przodu? – Tollo

0

To, co robimy w naszych projektach, to identyfikacja wewnętrznych i zewnętrznych zależności. Próbki dla wewnętrznych zależności przechodzą w projekcie testu jednostkowego (lub oddzielnego projektu Mocks, jeśli są używane w całym rozwiązaniu). Próbki dla zewnętrznych zależności przechodzą do samej aplikacji, a następnie są wykorzystywane do testowania wdrażania i integracji.

Zewnętrzna zależność jest czymś, co jest środowiskiem - tak, Active Directory, usługa sieciowa, baza danych, rejestrator, tego typu rzeczy. Wstrzykiwanie zależności jest obsługiwane w ten sam sposób - zewnętrzne zależności są definiowane w pliku konfiguracyjnym, dzięki czemu możemy łatwo wybrać, które chcemy użyć w czasie wykonywania.

Wewnętrzna zależność to prawie wszystko inne.

Powiązane problemy