Czy można to zrobić bez użycia Islatora typu TypeMock? Znalazłem kilka sugestii w Internecie, takich jak przekazywanie tylko metadanych ciągu połączenia, jednak nic, co spotkałem poza TypeMock wydaje się naprawdę pozwalać na pozorowany ObjectContext, który może zostać wstrzyknięty do usług testowania jednostkowego. Czy wpłacam $$ za TypeMocka, czy są alternatywy? Czy nikt nie zdołał stworzyć niczego podobnego do TypeMocka, który jest open source?EF4 - możliwe fałszywe ObjectContext do testowania jednostkowego?
Odpowiedz
Jestem jednostką testującą EF4 w łatwy sposób bez szyderstwa. To, co zrobiłem, to stworzenie interfejsu repozytorium z wykorzystaniem kodu z http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/ jako podstawy, po czym utworzyłem klasę InMemoryRepository<T>
, która używała interfejsu IRepository
. Następnie zamieniłem IObjectSet<T>
wewnątrz klasy List<T>
i odpowiednio zmieniłem metody pobierania.
Tak więc, jeśli chcesz wykonać test jednostkowy, przekazuj dane do InMemoryRepository, a nie do DataRepository.
-1 Linq2Objects zachowuje się inaczej niż Linq2Entities. Testy mogą przejść na listę
Nie można tego przekazać bez dostępu do bazy danych, więc nie jestem pewien, o co ci chodzi. Szyderstwo nie oznacza, że Twój Linq2Entities zawsze będzie ważny i będzie działał prawidłowo. – KallDrexx
Zawijaj zapytania i testuj je w oparciu o prawdziwą bazę danych. Następnie wyśmiewaj ich, testując logikę biznesową. Dlatego każde zapytanie jest elementem do ponownego wykorzystania, o którym wiesz, że fakt zadziała. Twoja logika biznesowa jest testowana bez potrzeby posiadania bazy danych, która jest w oczekiwanym stanie. –
Zawiń obiekt ObjectContext w klasie proxy. Następnie wstrzyknij to do swoich klas.
Tak, próbowałem tego, i jest to możliwe - jednak wszystkie te podejścia korzystające z serwerów proxy mają swoje własne ograniczenia. Linq działa inaczej na jedną rzecz (Linq do obiektów jest używany, w przeciwieństwie do Linq do podmiotów). –
PRAWDA, ale oczekiwanie, że testy jednostek wykryją różnice w różnych implementacjach Linq, wydaje się nieco za burtą w przypadku testów jednostkowych. Że więcej na arenie testów integracyjnych nie sądzisz? – SamuelWarren
Umieść swoje zapytanie Linq2Entity za interfejsem, przetestuj urządzenie w izolacji względem prawdziwej bazy danych.
Testy zapisu dla logiki biznesowej z mockami dla interfejsów zapytań. Nie pozwól, by Linq zakradł się do twojej logiki biznesowej!
Nie używaj RepositoryPattern!
Nie sądzę repozytorium wzór jest jedyną odpowiedzią na pytanie (unika się problemu, na pewno)
Lubiłem tę odpowiedź - Myślę, że bardziej odpowiedni do wprowadzenia testów z istniejącym kodzie Creating Interface for ObjectContext
- 1. Używanie SimpleHTTPServer do testowania jednostkowego
- 2. Jakie ramy testowania jednostkowego?
- 3. framework do testowania jednostkowego dla C
- 4. Prześmiewanie modułów w Node.js do testowania jednostkowego
- 5. Fałszywe strefy czasowe do testowania aplikacji internetowych
- 6. Jaki wpływ mają różne metody Save 4ptions EF4 na ObjectContext?
- 7. Dobre zasoby dotyczące testowania jednostkowego?
- 8. Django manage.py: Czy możliwe jest przekazanie argumentu wiersza poleceń (do testowania jednostkowego)?
- 9. Kolejki zadań testowania jednostkowego w AppEngine
- 10. Najprostszy sposób testowania kodu jednostkowego z Pythonem
- 11. Metoda testowania jednostkowego dla określonego wyjątku
- 12. Korzystanie z "przyjaciel" - deklaracje do testowania jednostkowego. Kiepski pomysł?
- 13. Jak wyśmiać Pythona datetime.now() w metodzie klasy do testowania jednostkowego?
- 14. Ulubione podejście do testowania jednostkowego dla funkcji PostgreSQL?
- 15. Konfiguracja IntelliJ IDEA do testowania jednostkowego z JUnit
- 16. Czy ktoś może zgłaszać doświadczenia z HWUT do testowania jednostkowego?
- 17. NodeJS: Jak utworzyć fałszywe gniazdo tcp do testowania serwerów
- 18. HttpClient z asp.net WebApi w scenariuszu testowania jednostkowego
- 19. Struktura testowania jednostkowego na węźle node.js z mangustą
- 20. Procedury testowania przechowywanego SQL CLR z projektem testu jednostkowego
- 21. Jak utworzyć zespół testowania jednostkowego dla biblioteki przenośnej klasy .NET?
- 22. Metody wewnętrzne testowania jednostkowego w bibliotece standardowej .Net VS2017
- 23. Kod struktury jednostki Najpierw: Jak zasiać bazę danych do testowania jednostkowego
- 24. Czy istnieje struktura testowania jednostkowego dla produktu Rascal?
- 25. Jakie jest preferowane środowisko testowania jednostkowego dla Perla?
- 26. Pogorszenie wydajności po uaktualnieniu modelu EF4 do modelu EF5 (DbContext)
- 27. Pobierz DBContext z ObjectContext
- 28. ObjectContext ConnectionString Sqlite
- 29. Dobre wzorce do testowania jednostkowego ziaren z weryfikacją opartą na adnotacjach w Spring MVC
- 30. Jakie jest najlepsze narzędzie do testowania jednostkowego dla kombinacji zarządzanego i niezarządzanego C++?
Jedna z sugestii, którą widziałem, to złamanie reguł ponownego testowania względem bazy danych. Facet powiedział, że używa CreateDatabase(), aby utworzyć "symulację" instancji db na bieżąco. Generalnie chcę tego uniknąć, ponieważ złamaliśmy tę zasadę na wcześniejszym projekcie i nie wyszło tak dobrze. Było OK do około 600 testów, ale na końcu z> 2000 testów było całkowicie bezużyteczne dla prawdziwego TDD i przeprowadziliśmy testy w "trybie wsadowym" od czasu do czasu (trwało 5 minut lub dłużej, aby je uruchomić). –