2013-04-08 4 views
1

Приветствия.
У меня есть созданное Roo веб-приложение. Я хочу проверить свой контроллер. Поэтому я использую весенний тест-3.2.
Использование STS 3.2.
Встроенное Derby для тестирования.
Сбой тестового набора, когда тест контроллера вклинивается между двумя интеграционными тестами - прерывает после него интеграционный тест. Если I @Ignore контрольный тест, пакет работает нормально. Этот интеграционный тест имеет как Roo, так и собственные методы тестирования.
Я много искал - но не могу объяснить это поведение. Я подозревал, что транзакции не вернутся правильно, но все кажется прекрасным (журналы хороши). У меня только один пустой метод проверки контроллера. Я думаю, что по какой-то причине мой @ContextConfiguration является вопрос ...Весна 3.2: @WebAppConfiguration нарушает существующие тесты @Transactional

Интеграция тест перед:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/META-INF/spring /applicationContext*.xml") 
@Transactional 
public class CompanyServiceImplTest { 

Test Controller:

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(value = { 
    "file:src/main/resources/META-INF/sprin/applicationContext.xml", 
    "file:src/main/webapp/WEB-INF/spring/webmvc-config.xml" }) 
@Transactional 

тест интеграции после (это нарушает)

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext*.xml") 
@Transactional 
@RooIntegrationTest(entity = Status.class) 
public class StatusIntegrationTest { 

Буду благодарен за любые указатели ...

--- здор`ово Атула

+0

_The набора тестов fails_, терпит неудачу как? –

+0

Метод разрыва теста предполагает – atul

+0

Извинения - пропущена ошибка. Метод прерывания предполагает, что база данных чиста (поскольку класс отмечен @Transactional) - и создает ** 4 объекта ** - затем он вызывает активную запись _countAll .. ._ метод. Когда тест выполняется автономно, это работает отлично. Однако, если пакет (как указано выше) запущен, он неожиданно сообщает ** 19 объектов ** - Откуда берутся эти 15 дополнительных объектов - семантика @Transactional каким-то образом накрутила? – atul

ответ

1

Это, вероятно, вызвано https://jira.springsource.org/browse/SPR-6121

обходной путь, который работал для меня, чтобы сделать все модульные тесты используют один и тот же контекст приложения, добавив @WebAppConfiguration всех модульных тестов, а также обеспечение все они имеют ту же @ContextConfiguration.

Похоже, вы используете Spring Roo. Чтобы избежать редактирования всех существующих модульных тестов, вы можете сделать копию своего webmvc-config.xml для своих тестов, переименовать/переместить его в соответствии с шаблоном applicationContext * .xml.

Добавление @WebAppConfiguration аннотацию к существующим тестам можно сделать с помощью аспекта:

package com.foo.bar; 

import org.springframework.test.context.web.WebAppConfiguration; 

privileged aspect WebAppConfigurationAspect { 
    declare @type: com.foo.bar..*Test: @WebAppConfiguration; 
} 
Смежные вопросы