2011-12-22 12 views
26

Pracuję nad aplikacją Spring (wiosna 3.0) i następującą po warstwową architekturą tj. Controller -> Service -> DAO layers.Junit do przetestowania usługi Spring i warstwy DAO

Chcę pisać jednostkowe przypadki testowe dla usługi i warstwy DAO przy użyciu Junit.
Sprawdziłem oficjalną stronę Spring, a także wypróbowałem wiele innych stron, ale nie mogłem wymyślić łatwego i prostego sposobu na to.

Czy ktoś może zapewnić mi przydatne zasoby?


EDIT:
Wygląda Mockito jest dobrym rozwiązaniem. Każdy dobry link do korzystania z niego na wiosnę.

Dziękuję Alex za sugestię.

+0

OSTROŻNIE. Link "Prześmiewanie warstwy usługi" prowadzi teraz do złośliwej strony. – Cenobyte321

+0

@ Cenobyte321 Dzięki, link usunięty. – xyz

+0

Jeśli używasz hibernacji i rozruchu wiosennego, dlaczego nie skonfigurować bazy danych H2 w pamięci zainicjowanej po rozpoczęciu testu? Następnie użyj Annotation SpringBootTest AutoConfigureTestEntityManager Transactional na swojej klasie testowej i po prostu Autowired swoje dao i możesz naprawdę przetestować to bez próbnego.Lepiej możesz użyć MockMvc i przetestować cały webservice od kontrolera (i tak myślę, że kontroler używa usługi, która używa dao). – amdev

Odpowiedz

25

Pod względem zasobów wiosenna dokumentacja dotycząca testowania jest bardzo dobra. To można znaleźć here.

Podczas testowania warstwy usługi należy użyć szyderczej biblioteki, takiej jak Mockito, aby sfałszować swoje DAO, a tym samym warstwę domeny. Zapewnia to, że są to prawdziwe testy jednostkowe.

Następnie do testu integracji DAO z bazą danych można skorzystać z wiosennych narzędzi testowych transakcyjnych opisanych w tej dokumentacji.

+0

Dzięki. Nie wiedziałem o Mockito. Spróbuję i zaktualizuję. – xyz

+0

Stwierdziłem, że Mockito jest bardzo potężny i łatwy w użyciu. Wszystkie testy jednostek serwisowych wykorzystują to. –

+0

Po prostu zobaczyłem, wypróbowałem i polubiłem to. Dzięki. Jakiś dobry link do korzystania z testów serwisowych Mockito na wiosnę? – xyz

4

nie wiem zbyt wiele o zasobach, ale to nie jest takie trudne do zrobienia, jeśli masz konfigurację dao + sprężyna ładnie. Będziesz potrzebował następujących:

  1. obliously zależności. z Maven, coś w tym:

    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.8.2</version> 
    </dependency> 
    
  2. klasy testy, które umieścić wewnątrz src/test/java:

    @TransactionConfiguration(defaultRollback = true) 
    @ContextConfiguration({ "classpath:test-spring-context.xml" }) 
    @Transactional 
    @RunWith(SpringJUnit4ClassRunner.class) 
    public class SomeTests { 
        // ... 
    } 
    
  3. Plik kontekst dla konfiguracji sprężyny Twego DAO DataSource umieszczony wewnątrz src/test/resources. Gdzieś w test-wiosna-context.xml:

    <import resource="datasource-test.xml" /> 
    

Teraz na przykład w Eclipse można uruchomić projekt jako test JUnit.

Potrzebujesz więcej informacji? Czy to rozwiązanie ma zastosowanie?

+0

Dzięki. Jak mogę przetestować warstwę usługi? – xyz

+0

Nie jestem pewien, co dokładnie jest dla ciebie usługą, ale zakładam, że to ma utrzymywać logikę aplikacji, wywołując metody CRUD na DAO, za każdym razem, gdy kontroler to powie. Jeśli tak, nie ma różnicy. Po prostu wstrzyknij klasę usługi w powyższej konfiguracji, wywołaj metody, porównaj wyniki, a następnie wszystkie zostaną wycofane. – Pete

+0

Tak. Przez serwis rozumiem klasę, która przywołuje metody DAO. – xyz

Powiązane problemy