Тестирование REQUIRES_NEW в JUnit - PullRequest
1 голос
/ 30 января 2012

При запуске моего теста он зависает при вызове метода (). Я делаю что-то неправильно? Помогите!

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"beans.xml"})
@Transactional(rollbackFor = Exception.class)
public class Test {
    @Test
    public void test() {
        itemUnderTestDao.method();
        // ...
    }
}

public class ItemUnderTestDao {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void method() {
        // ...
    }
}

Забудьте код выше. Сейчас я загрузил проект Eclipse (за исключением зависимостей, таких как spring) со http://www44.zippyshare.com/v/46865082/file.html. Весь вклад в то, как пройти тест, действительно приветствуется! Тест пройден, если у меня есть две базы данных sqlite и два источника данных ...

Ответы [ 2 ]

0 голосов
/ 09 декабря 2012

Как сказал mrembisz, вы пытаетесь получить 2 соединения одновременно / поток.

  1. Для самого теста, который будет существовать во время теста
  2. Длявызов метода, который существовал бы во время вызова.

Я столкнулся с одной и той же вещью в несколько разных обстоятельствах.

2 способа исправить это:

  1. Измените распространение на REQUIRED, чтобы вы повторно использовали Connection, который был изначально приобретен для теста.
  2. Увеличьте размер пула, но имейте в виду, что вам необходимо учитывать максимальное количество одновременных обновлений, примерноmaxThreadPoolSize >= (maxSimultaniousUpdates + 1) + (min size for other activities) (Если в списке 1 находится ожидающее соединение, в конечном итоге все ожидающие операции будут завершены).В противном случае это снова появится в производстве.

Первое решение кажется мне лучшим, конечно, если оно не повредит вашей логике:)

0 голосов
/ 30 января 2012

Вы пытаетесь открыть второе соединение с базой данных.Первый открывается из-за @Transactional для класса Test, REQUIRES_NEW при method() вызывает другое соединение.

Возможно, ваш пул соединений допускает только одно одновременное соединение.Проверьте его размер и конфигурацию базы данных.

Также просмотрите свои вопросы и отметьте выбранные ответы как принятые (форма галочки рядом с телом ответа).

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