2011-04-24 10 views
6

Jestem nowy w użyciu Mockito i staram się zrozumieć sposób na wykonanie testu jednostkowego klasy, która opiera się na wstrzykniętych zależnościach. Co chcę zrobić, to stworzyć fałszywe obiekty zależności i sprawić, że klasa, którą testuję używa tych zamiast regularnych wstrzykniętych zależności, które zostałyby wstrzyknięte przez Spring. Czytałem samouczki, ale jestem nieco zdezorientowany, jak to zrobić.Mockito, Testowanie obiektu, który polega na wstrzykniętych zależnościach (Spring)?

mam jedną klasę chcę przetestować tak:

package org.rd.server.beans; 

import org.springframework.beans.factory.annotation.Autowired; 

public class TestBean1 { 

    @Autowired 
    private SubBean1 subBean1; 

    private String helloString; 

    public String testReturn() { 

     subBean1.setSomething("its working"); 
     String something = subBean1.getSomething(); 
     helloString = "Hello...... " + something; 

     return helloString; 
    } 

Następnie mam klasy, które chcę użyć jako atrapa obiektu (zamiast zwykłej SubBean1 klasie, jak poniżej:

package org.rd.server.beans.mock; 

public class SubBean1Mock { 

    private String something; 

    public String getSomething() { 
     return something; 
    } 

    public void setSomething(String something) { 
     this.something = something; 
    } 


} 


    } 

chcę po prostu spróbuj uruchomić prosty test tak:

package test.rd.beans; 
import org.rd.server.beans.TestBean1; 

import junit.framework.*; 


public class TestBean1Test extends TestCase 
{ 
    private TestBean1 testBean1; 

    public TestBean1Test(String name) 
    { 
     super(name); 
    } 

    public void setUp() 
    { 
     testBean1 = new TestBean1(); 
     // Somehow inject the mock dependency SubBean1Mock ??? 

    } 

    public void test1() { 
     assertEquals(testBean1.testReturn(),"working"); 
    } 
} 

Myślę, że musi istnieć jakiś prosty sposób, aby to zrobić, ale nie mogę zrozumieć tutoriali, ponieważ nie mam jeszcze kontekstu, aby zrozumieć wszystko, co robią/wyjaśniają. Gdyby ktoś mógł rzucić trochę światła na to, byłbym wdzięczny.

Odpowiedz

8

Jeśli używasz Mockito tworzenia mocks poprzez wywołanie statycznej metody makiety Mockito użytkownika. Następnie możesz po prostu przekazać próbę klasie, którą próbujesz sprawdzić. Twoja metoda konfiguracja będzie wyglądać następująco:

testBean1 = new TestBean1(); 
SubBean1 subBeanMock = mock(SubBean1.class); 
testBean1.setSubBean(subBeanMock); 

Następnie można dodać odpowiednie zachowanie się swoimi atrapa obiektu na cokolwiek próbujesz przetestować ze gdy statyczne metody Mockito użytkownika, na przykład:

when(subBeanMock.getSomething()).thenReturn("its working"); 
5

W Mockito tak naprawdę nie zamierzasz tworzyć nowych "symulacyjnych" implementacji, ale zamiast tego będziesz wyśmiewał metody na interfejsie wstrzykiwanej zależności, mówiąc Mockito, co powrócić, gdy metoda zostanie wywołana.

Napisałem test wiosennego kontrolera MVC za pomocą Mockito i potraktowałem go jak każdą inną klasę Java. Udało mi się wyśmiewać różne inne fasole wiosenne, które miałem, i wstrzyknąć je za pomocą Spring ReflectionTestUtils, aby przekazać wartości oparte na Mockito. Napisałem o tym na moim blogu w lutym. Ma pełne źródło dla klasy testowej i większości źródeł ze sterownika, więc prawdopodobnie jest zbyt długa, aby umieścić tutaj zawartość.

http://digitaljoel.nerd-herders.com/2011/02/05/mock-testing-spring-mvc-controller/

+0

Dzięki, twoja odpowiedź pomaga mi zrozumieć to w prostym języku angielskim :) Myślę, że jestem na dobrej drodze teraz – Rick

+0

Jestem całkiem nowy na kpiny, ale sprawia to, że skomplikowane testy są naprawdę fajne, gdy tylko zorientujesz się, jak to działa. Naprawdę lubiłem Mockito i uważam, że praca z nim jest bardzo przyjazna. Powodzenia w testach! – digitaljoel

+0

dziękuję, świetny artykuł, miałem problem z uruchomieniem go, ale teraz rozumiem to lepiej, jestem pewien, że coś, co zrobiłem źle, będąc nowym, ale udało mi się przekonać do działania Eda. Egzamin próbny to zdecydowanie coś, co powinienem robić więcej – Rick

Powiązane problemy