Testuję usługę mojej aplikacji, która zależy od innych usług w środowisku wykonawczym. Podczas testowania wydaje się, że wtrysk zależności nie działa. Czy wtrysk zależności działa w artefaktach Grails podczas testowania integracji?Wstrzyknięcie zależności w testach integracji Grailsa
Odpowiedz
Tak, podczas uruchamiania testów (np. W katalogu integracji) aplikacja jest uruchamiana, a wszystkie komponenty bean są tworzone i wstrzykiwane tak, jakby aplikacja była faktycznie uruchomiona. Jedyną różnicą między aplikacją testową a uruchomioną aplikacją powinno być środowisko konfiguracyjne.
Oczywiście, jeśli utworzysz klasę wymagającą wstrzyknięcia za pomocą "nowego" operatora w teście, nie uzyskasz korzyści z DI. Zamiast tworzyć nieruchomość w Twoim przypadku testowego dla fasoli swoje badania i będzie wstrzykiwany:
class MyServiceTests extends GrailsUnitTestCase {
MyService service
void testInjection() {
assertNotNull service
}
}
Dla tych z Was, używając Grails 1.3.7, znalazłem, że nie można użyć nazwy klasy w celu uzyskania działania Injection Dependency Injection. Zamiast tego, deklaruj usługę jako:
def myService
, a następnie dzieje się magia DI. W przypadku powyższego kodu w wersji 1.3.7 nieudana asercja zakończy się niepowodzeniem.
1.3.7 i więcej. Jest to również problem w 2.4.x. Dodatkowo w przypadku testów integracji kontrolera należy utworzyć instancję kontrolera: 'def fooController = new FooController()' - wtedy zależności będą poprawnie podłączone. –
- 1. Filtr testowy integracji Grailsa
- 2. Przesłanianie fasoli w testach integracji
- 3. Wstrzyknięcie zależności z Orleanem
- 4. angularjs - wstrzyknięcie zależności runtime?
- 5. Wstrzyknięcie zależności wewnątrz obiektu
- 6. Wstrzyknięcie zależności Java EE 5?
- 7. Wstrzyknięcie zależności: Jak przekazać pojemnik do wstrzykiwania?
- 8. Wstrzyknięcie zależności sprężyny: Wstrzyknij wszystkie wystąpienia interfejsu
- 9. Wstrzyknięcie zależności ASP.NET 5, wstrzyknąć parametry
- 10. Wstrzyknięcie zależności: wstrzykiwanie częściowo zainicjowanych obiektów
- 11. Różnica między MockMvc i RestTemplate w testach integracji
- 12. Spring 3 Test integracji sterownika MVC - wstrzyknięcie Principal do metody
- 13. Wstrzyknięcie zależności w ASP.NET Core 2 zgłasza wyjątek
- 14. Jedność (wstrzyknięcie zależności): Jak przekazać parametr do konstruktora w RegisterType
- 15. Wstrzyknięcie zależności w JavaScript? (Dla danych opartych na wizualizacji)
- 16. Wstrzyknięcie zależności bieżącego użytkownika w aplikacji MVC przy użyciu StructureMap3
- 17. Wstrzyknięcie zależności CustomView sztyletem 2 (w zakresie aktywności)
- 18. AngularJS - Wstrzyknięcie zależności w usługach, fabrykach, filtrach itp.
- 19. Wstrzyknięcie zależności sprężynowych w Spring TestExecutionListeners nie działa
- 20. Wstrzyknięcie zależności wewnątrz składnika FilterArt w ASP.NET MVC 6
- 21. Maven 2 - różne wersje zależności w testach i kompilacji
- 22. Szyderstwo Zależności od modułu kątowego w testach jednostkowych Jasmine
- 23. Wstrzyknięcie zależności C# - jak wprowadzić zastrzyk bez źródła?
- 24. Wstrzyknięcie zależności od PHP, gdy argumenty konstruktora są niedostępne.
- 25. Wstrzyknięcie zależności IoC do niestandardowego modułu HTTP - jak? (ASP.NET)
- 26. Wstrzyknięcie zależności JavaScript przy użyciu RequireJS, Jasmine i testera
- 27. Wstrzyknięcie zależności automatycznych nie powiodło się podczas korzystania z @Transactional
- 28. Wstrzyknięcie autowyred zależności nie powiodło się; Zagnieżdżony wyjątek to org.springframework.beans.factory.BeanCreationException:
- 29. Wstrzyknięcie zależności konstruktora od NHibernate 2.1 i StructureMap
- 30. Wstrzyknięcie prymitywnego typu w AngularJS
Dzięki. Testuję usługę, która zależy od usług innych i ja ją tworzyłem i dlatego nie otrzymałem korzyści z DI. – Lucas
Tylko notatkę. Testy integracyjne nie powinny rozszerzać GrailsUnitTestCase w zależności od wersji, co może powodować poważne problemy z ustawieniem ConfigurationHolder.config jako wartością null. Yes Grails create-integration-test w wielu wersjach tworzy test rozszerzający GrailsUnitTestCase, ale jest to błąd, który został naprawiony w ostatnim czasie. –
Dlaczego odpowiedź brzmi "Oczywiście, jeśli utworzysz klasę wymagającą iniekcji", nie otrzymasz DI? Dlaczego tak się dzieje? Nie było to dla mnie oczywiste - choć boleśnie to rozgryzłem. –