2012-12-20 20 views
6

Mam następujący scenariuszCzy jest coś podobnego do JUnit metodę konfiguracji w Mockito

interface DAO 
{ 
     String a(); 
     String b(); 
     String c(); 

} 

utworzyć makiety tego interfejsu DAO i karmię go do czegoś, co nazywa DAOProcess. Wewnątrz DAOProcess, mam różne metody wywoływania metod DAO a, b i c.

Teraz za każdym razem, gdy muszę przetestować metodę w DAOProcess, skończę pisać: when(mockDAO.a()).thenReturn("test").

Czy mimo to mogę przenieść te when(mockDAO.a()).thenReturn("test") wspólne dla wszystkich przypadków testowych?

Odpowiedz

9

Jeśli przypadki testowe są w jednej klasie można skorzystać z metody z dopiskiem @Before, np

... 
private DAO mockDAO; 

@Before 
public void setUp() { 
    mockDAO = mock(DAO.class); 
    when(mockDAO.a()).thenReturn("test"); 
    ...etc... 
}  
... 

Jeśli potrzebujesz zachowania w wielu klasach testowych, możesz napisać klasę narzędzia, aby ustawić zachowanie na instancji makiety, np .:

public class MockDAOPrototype { 
    public DAO getMockWithDefaultBehaviour() { 
     final DAO mockDAO = mock(DAO.class); 
     when(mockDAO.a()).thenReturn("test"); 
     ...etc... 

     return mockDAO; 
    } 
} 

A następnie zadzwoń pod numer MockDAOPrototype.getMockWithDefaultBehaviour() w swoim metodzie setUp.

2

Możesz utworzyć klasę AbstractTestCase, która jest abstract i jest rozszerzona o wszystkie przypadki testowe, w których potrzebujesz tej sztuczki. W tym abstrakcyjnym teście testowym będziesz mieć następujące stwierdzenia.

@Ignore // just in case your runner thinks this is a JUnit test. 
public abstract class AbstractTestCase 
{ 
     @Mock 
     private DAO mockDAO; 

     @Before 
     private void setupMocks() 
     { 
      when(mockDAO.a()).thenReturn("test") 
      .... 
     } 
} 

W twoich konkretnych klas przypadku testowego, byś

public class MyConcreteTestCase extends AbstractTestCase 
{ 
     @InjectMocks 
     @Autowired 
     private DAOProcess daoProcess; 

     .... 
} 
+0

Nie użyłbym tutaj adnotacji Autowired, ponieważ może to być mylące z wiosennymi rzeczami. Nawet jeśli DAOProcess został zbudowany w kontekście wiosennym, nie jestem pewien, czy byłby to mądry pomysł zastąpienia referencji współpracownika przez makiety, podczas gdy te wiązki są nadal zarządzane wiosną! – Brice

Powiązane problemy