Проблемы с использованием dbunit с Spring (без spring-test-dbunit)
Я пытаюсь использовать dbunit для проверки моих DAO. Мы используем Spring в версии, которая не совместима с spring-test-dbunit. Я не могу автоматически подключить мои dao-бины к моему тестовому классу, потому что тогда мне придется использовать @RunWith(SpringJUnit4ClassRunner.class)
что касается одного беспараметрического конструктора. Мой класс выглядит следующим образом:
public class DbUnitExample extends DBTestCase {
@Autowired
public MyDAO myDAO;
public DbUnitExample(String name) {
super(name);
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "...");
}
@Override
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSetBuilder().build(new FileInputStream("target/partial.xml"));
}
@Override
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.REFRESH;
}
@Override
protected DatabaseOperation getTearDownOperation() throws Exception {
return DatabaseOperation.NONE;
}
@Test
public void testSometing() throws Exception {
myDAO.deleteById(12662);
}
}
Конечно, я получаю NPE, потому что мой боб дао не может быть найден. Когда я использую @RunWith(SpringJUnit4ClassRunner.class)
Мне нужно предоставить один конструктор без параметров и удалить мой конструктор "dbunit". Существует ли стандартный способ или обходной путь для использования dbunit с пружиной без использования spring-test-dbunit
РЕДАКТИРОВАТЬ
Мой класс теперь выглядит следующим образом:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test-application.xml")
@DirtiesContext
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class })
public class DbUnitExample extends DBTestCase {
@Autowired
public MyDAO myDAO;
public DbUnitExample() {
super("target/partial.xml");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "...");
}
@Override
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSetBuilder().build(new FileInputStream("target/partial.xml"));
}
@Override
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.REFRESH;
}
@Override
protected DatabaseOperation getTearDownOperation() throws Exception {
// return DatabaseOperation.NONE;
// return DatabaseOperation.REFRESH;
return DatabaseOperation.CLEAN_INSERT;
}
@Test
public void testSometing() throws Exception {
myDAO.deleteById(12662);
}
}
Теперь он компилируется, но не имеет функциональности dbunt, что означает, что если я удаляю строку, она не восстанавливается до своего прежнего состояния (вставляется снова).
1 ответ
Поскольку вы используете Spring, я предлагаю автоматически подключить экземпляры dbUnit к тесту. Страница тестовых примеров dbUnit содержит "Пример конфигурации с использованием Spring" для PrepAndExpectedTestCase
, но просто скопируйте код и измените его на DBTestCase
и настроить соответственно.