Я пытаюсь выполнить тестирование моего класса и издеваться над DAO для обеспечения прогнозируемых результатов. Тем не менее, похоже, что мой метод DAO все еще называется, поскольку я получаю ошибку спящего режима.unit testing mock injection
org.hibernate.exception.GenericJDBCException: Station TST не найден.
Эта ошибка является результатом того, что моя база данных не содержит TST, но разве это нельзя даже назвать, поскольку я издевался над DAO? Как я высмеиваю вызов, чтобы база данных даже не попала.
Вот как настроить мой макет
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class MyServiceTest{
@Autowired
private MyService service;
private MyDAO dao;
private LinkedList objs;
@Before
public void init() throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
// mock the dao for predictable results
dao = mock(MyDAO.class);
when(dao.myDBCall(anyString(), any(Date.class))).thenReturn(legs);
Field f = MyService.class.getDeclaredField("dao");
f.setAccessible(true);
f.set(service, dao);
}
@Test
public void testCall() {
// construct our sample leg data
legs = new LinkedList();
//fill in my stub data i want to return
Collections.shuffle(legs);
List results = service.testingCall("TST", new Date()); // this fails because service is using the dao, but it is making a call to the DB with this garbage 'Test' param rather than just returning 'legs' as stated in my when clause
assertThat(results, not(nullValue()));
}
@Test
public void testGetGates() {
// fail("Not yet implemented");
}
@Test
public void testGetStations() {
// fail("Not yet implemented");
}
}
H2, к сожалению, не вариант. Что касается «делать это сам по себе», то в моем сервисе есть много других компонентов, которые мне нужно сделать AutoInjected, что делает этот подход непрактичным. Неужели невозможно полностью издеваться над дао? – 75inchpianist
Вы можете. Во-первых, переместите конфигурацию xml, связанную с гибернацией, на некоторый («dev») профиль Spring (google для «профилей весны»). Затем создайте свою незавершенную реализацию dao и поместите ее в профиль «test». После добавления аннотации @ActiveProfiles («test») к тесту (вам также необходимо активировать профиль «dev» при запуске обычного приложения). Если вам не нравятся профили - разделить конфигурацию в 3 файла (applicationContext.xml, dev.xml, mock.xml) –
А также проверить - https://bitbucket.org/kubek2k/springockito/wiki/Home –