Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JUnit в связке с Hibernate 
:(
    Опции темы
cSKA
  Дата 6.5.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Доброго времени суток!

Поставлена следующая задача:

Сделать ява морду с использование hibernate (проблем с этим сейчас нет) и тестирование основанное на JUnit и JMock.

Вопрос собственно состоит в том, как сделать это тестирование.

Смотрел примеры junit'а, но т.к. они все связаны с арифметикой, не понятно как связать их с методами работы hibernate.

Заранее благодарен всем откликнувшимся.
PM MAIL   Вверх
powerOn
Дата 6.5.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 1
Всего: 159



Достаточно расплывчатая постановка вопроса. Какие конкретно трудности, для какого конкретно класса?


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
cSKA
Дата 6.5.2010, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



трудность в создании теста к примеру на такую модель:
Код

package megajournal.model;

import java.util.List;
import megajournal.HibernateUtil;
import org.hibernate.Session;

public class GroupModel {

    public GroupModel() {
    }

    public void add(Group group) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(group);
        session.getTransaction().commit();
    }

    public List<Group> get() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List<Group> groups = session.createQuery("from megajournal.model.Group").list();
        session.getTransaction().commit();
        return groups;
    }

    public Group get(Long id) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Group group = (Group) session.load(Group.class, id);
        session.getTransaction().commit();
        return group;
    }

    public void delete(Group group) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.delete(group);
        session.getTransaction().commit();
    }

    public void update(Group group) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.update(group);
        session.getTransaction().commit();
    }

}

PM MAIL   Вверх
Nofate
Дата 6.5.2010, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: нет
Всего: 8



Ну вот, например, создаем экземпляр Group, инициализируем, сохраняем (GroupModel.add) . Потом пытаемся получить по айдишнику тот же экземпляр Group из хранилища и сравниваем поля обоих экземпляров. Если все соответствует - то ОК.




--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
ivanovpv
Дата 7.5.2010, 07:54 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: нет
Всего: 28



Цитата(cSKA @  6.5.2010,  14:52 Найти цитируемый пост)
Сделать ява морду с использование hibernate (проблем с этим сейчас нет) и тестирование основанное на JUnit и JMock.

Вопрос собственно состоит в том, как сделать это тестирование.


Извиняюсь за оффтопик... JUnit иже с ними средства предназначенные для ускорения разработки - посредством быстрого и качественного тестирования, но никак не самоцель. Я лично JUnit применяю только в случае когда я вижу, что тестирование без оного займет много времени чем с оным. В данном случае, если нет понимания как построить тестсьюты - проще наверное забыть о них - взять в руки логгер с дебаггером и вперед.


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
powerOn
Дата 7.5.2010, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 1
Всего: 159



Цитата(ivanovpv @  7.5.2010,  08:54 Найти цитируемый пост)
В данном случае, если нет понимания как построить тестсьюты - проще наверное забыть о них - взять в руки логгер с дебаггером и вперед. 


Не сбивайте человека с правильного пути. Понимание не приходит без обучения, а автор темы как раз учится писать тесты. 
Если у вас хороший дизайн кода и тестов, то логгер с дебаггером не понадобятся - это одна из целей автоматизации тестирования.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
cSKA
Дата 8.5.2010, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



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

Nofate, спасибо, попробую.

Если у кого еще предложения будут рад их увидеть.
PM MAIL   Вверх
Nofate
Дата 9.5.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: нет
Всего: 8



Ну, аналогично можно добавить объект в хранилище, удалить его и попытаться получить - проверяем работоспособность удаления.
Если на поля самого Group накладываются какие-либо ограничения - тестируем их. То есть пытаемся создать заведомо некорректные экземпляры и смотрим, что выйдет.
Потом, когда появится business layer точно так же тестируем и его.

В идеале на каждое требование/ограничение технического задания должен быть тест. Таким образом, успешно прогнав все тесты на готовой системе, вы будете уверены, что она делает именно то, что задумывалось.

Это сообщение отредактировал(а) Nofate - 9.5.2010, 18:51


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Старовъръ
Дата 3.6.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 2
Всего: 10



Цитата
Я лично JUnit применяю только в случае когда я вижу, что тестирование без оного займет много времени чем с оным. В данном случае, если нет понимания как построить тестсьюты - проще наверное забыть о них - взять в руки логгер с дебаггером и вперед. 
Во-первых, далеко не всегда ясны требования в начале цикла разработки, а соответственно не ясно будет что усложниться и будет подвержено риску. Во-вторых, всегда есть возможность того, что кто-то полезет дописывать функционал, и нужно какое-то средство для того, чтоб быть уверенным в правильности изменений.
По поводу тестирования DAO - наваял когда-то такую штуковину, но не знаю насколько она полезна на практике: http://javatalks.ru/ftopic11496.php

Это сообщение отредактировал(а) Старовъръ - 3.6.2010, 16:49
PM MAIL WWW   Вверх
mozambique
Дата 18.8.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.8.2010

Репутация: нет
Всего: нет



Первое. Нужно понять что вы собираетесь тестировать.

Например: вы собираетесь тестировать маппинг.

Код

@Test
public void testAdd()
{
     Group group = new Group();
     model.add(group);
   
     assertEntityIsStored(group);   
}


Собираетесь тестировать GroupModel как таковую:

Код

public interface Action {
    public void execute(Session session);
}

public interface DataExecutor {
    void doInTransaction(Action action);
}

public class BadCodeDataExecutor implements DataExecutor {

    private Session getSession()
    {
        return HibernateUtil.getSessionFactory().getCurrentSession();
    }

    public void doInTransaction(Action action) {
        final Session session = getSession();
        Transaction transaction = session.beginTransaction();
        action.execute(session);
        transaction.commit();
    }
}

public class GroupModel
{
    private DataExecutor executor;

    public void addGroup(final Group group)
    {
        executor.doInTransaction(new Action()
        {
            @Override
            public void execute(Session session) {
                session.saveOrUpdate(group);    
            }
        });
    }
}

public class GroupModelTest
{
    private final DataExecutor spy = new SpyDataExecutor();
    private GroupModel model = new GroupModel(spy);

    @Test
    public void testAdd()
    {
        final Group group = new Group();
        model.add(group);
        spy.assertGroupIsStored(group);
    }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.