сервисный уровень модульного тестирования, использующий спящий режим и аннотации, без DAO - PullRequest
2 голосов
/ 13 февраля 2012

Как лучше всего провести модульное тестирование / интеграционное тестирование следующим образом:

@Service("fooService")
public class FooService {

  @Resource(name = "sessionFactory")
  private SessionFactory sessionFactory;

  /*** Get all **/
  @Transactional(readOnly = true)
  public List<Foo> getAllFoos() {
    final Session session = sessionFactory.getCurrentSession();
    final Criteria crit = session.createCriteria(Foo.class);
    return crit.list();
  }
}

Я счастлив использовать mockito, но не был уверен, как использовать его полезность. В большинстве случаев, которые я видел, требуется, чтобы dao / mock dao передавался как параметр метода.

Очевидно, что затем я экстраполирую на более сложные методы.

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Этот класс является DAO, и от насмешливого сеанса и т. Д. Выиграть нечего, если только у вас нет большой логики - если вы это сделаете, это может быть лучше размещено в реальном классе обслуживания или в самой модели.

Подумайте, что вы пытаетесь проверить здесь: возвращают ли эти методы то, что они должны из базы данных. Я бы запустил интеграционные тесты для базы данных в памяти.

1 голос
/ 13 февраля 2012

Думаю, вам нужно решить несколько вещей:

  • Сохраняете ли вы sessionFactory в качестве поля или нет.Я полагаю, вам следует.
  • Использовать ли конструктор или сеттер.Я предпочитаю инжекцию в конструктор.
  • Как вы собираетесь издеваться над SessionFactory: напишите его от руки, используйте Mockito, EasyMock ..., в зависимости от того, что вы предпочитаете.
1 голос
/ 13 февраля 2012

Если вы добавите аннотацию @Resource к методу, вам будет гораздо проще настроить тест и настроить сервис с фиктивной реализацией SessionFactory (если это было тем, о чем вы просили).

@Service("fooService")
public class FooService {

  private SessionFactory sessionFactory;

  @Resource(name = "sessionFactory")
  public void setSessionFactory(SessionFactory sessionFactory) {
     this.sessionFactory = sessionFactory;
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...