Spring / В спящем режиме / JUnit - Нет В спящем режиме Сессия, обязанная Распараллеливать

JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);

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

Если вы действительно хотите добавить ComponentMover в класс пользовательской панели, вы можете переопределить метод addNotify ():

@Override
public void addNotify()
{
    super.addNotify();

    JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);
    ComponentMover cm = new ComponentMover(frame, this);
}
19
задан Marty Pitt 25 June 2012 в 02:55
поделиться

4 ответа

Неверно, это просто заполнит ваш код кодом управления сеансом.

Во-первых, добавьте компонент управления транзакциями в свой контекст:

    <bean id="transactionManager" 
          class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

Во-вторых, расширить AbstractTransactionalJUnit4SpringContextTests

    public class BaseDALTest 
           extends AbstractTransactionalJUnit4SpringContextTests{

В-третьих вещь, аннотируйте свой тестовый класс с помощью

    @TransactionConfiguration
    @Transactional

Если разграничение вашей транзакции правильное (вокруг вашего dao или службы), вам следует закончить.

Нехорошо разбрасывать код обработки сеанса и транзакции вокруг вашего кода (даже внутри ваших тестов ).

31
ответ дан 30 November 2019 в 03:29
поделиться

Ага.

Сеанс сеанса = sessionFactory.openSession ();

Session session = sessionFactory.getCurrentSession();

Ой.

(Отредактировано, так как это было неправильно, и получил голосование).

0
ответ дан 30 November 2019 в 03:29
поделиться

С приведенной выше конфигурацией Spring должно быть достаточно кода

Session session = sessionFactory.getCurrentSession();

в вашем методе и классе для тестирования. Управление сеансом осуществляется с помощью тестовой конфигурации Hibernate / Spring / JUnit, как это делается позже в конфигурации Hibernate / Spring в реальном приложении.

Вот как это работало для моих тестов. В окончательном веб-приложении автоматически будет сеанс Hibernate, связанный с текущим веб-запросом, поэтому при тестировании не должно быть вызова sessionFactory.openSession () .

2
ответ дан 30 November 2019 в 03:29
поделиться

Пожалуйста, обратитесь к документации по Spring. Там есть целая глава по тестированию, и раздел по управлению транзакциями:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/testing.html#testing-tx

У меня был успех в расширении AbstractTransactionalJUnit4SpringContextTests, но есть обходной путь:

TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    @Override
    protected void doInTransactionWithoutResult(TransactionStatus status) {
        // DAO has access to the session through sessionFactory.getCurrentSession()
        myDao.findSomething(id);
    }
});
5
ответ дан 30 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: