Модульное тестирование с помощью unitils, dbunit и spring

Я новичок в унитилах (встроенных в дбунит) и в пружине. На новом месте, где я работаю, я вижу, что некоторые тесты проводятся с пружиной, а другие используют unitils/dbunit без пружины.

Есть толчок для использования пружины, поэтому я пытался объединить следующие функции.

Весенние тесты с использованием:

@RunWith(SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations = { "classpath:spring-dev.xml" })
public class x(){
@Autowired
private ProfileDao profileDao;

@Test
@Rollback
@Transactional
public void shouldRetrieveProfileByUserNumber() {
    Profile profile = profileDao.retrieveProfile("u1", "0000003861", null);
    assertThat(profile.getUserNumber(), is("0000003861"));
}

Этот класс имеет @Autowired ProfileDao, который работает при использовании @RunWith(SpringJUnit4ClassRunner.class).

Тесты Unitils с использованием:

@RunWith(UnitilsJUnit4TestClassRunner.class)
@DataSet("WEB_SERVICE_DATASET.xml")
public class ServiceExceptionTest {}

Который правильно загружает базу данных и т. Д. При запуске.

Я пытаюсь добиться того, чтобы объединить их, чтобы я мог "Unitil'ise" мой класс с аннотацией @RunWith(UnitilsJUnit4TestClassRunner.class), но также использовал пружину обычным способом, как в предыдущем классе.

Проблема в том, что я не могу унифицировать мой класс при использовании весенней версии, поскольку они оба являются расширениями JUnit4ClassRunner.

Я пробовал разные варианты, но не смог заставить их работать.

Кто-нибудь может посоветовать достойный способ сделать это?

Спасибо

2 ответа

У Unitils на самом деле нет надлежащей поддержки интеграции с Spring.

Взгляните на spring-test-dbunit.

Unitils имеет пакет интеграции Spring:

org.unitils:unitils-spring:3.3

Нам не пришлось переходить с тестов Spring, но мы используем Spring и Unitils вместе. Вместо того, чтобы использовать аннотацию @RunWith, мы создаем подкласс:

import org.unitils.UnitilsJUnit4;
import org.unitils.dbunit.annotation.DataSet;
import org.unitils.spring.annotation.SpringBean;
import org.unitils.spring.annotation.SpringApplicationContext;

@SpringApplicationContext({"main-context.xml", "test-context.xml"})
@DataSet
public class ServiceTest extends UnitilsJUnit4 {

  @SpringBean("ourServiceBean")
  OurService ourService;

  @Test
  public void someTest() throws Exception {
  }
}

Недавно мы столкнулись с проблемой, когда наши тестовые данные не загружались должным образом с первого раза. Это может быть конфликт между обработкой транзакций Unitils и Spring. Я не совсем уверен, но отключаю транзакции в Unitils, установив это свойство:

DatabaseModule.Transactional.value.default=disabled

в файле unitils.properties обошли проблему.

Другие вопросы по тегам