Я тестирую пружинное приложение атм.
Во-первых, проблема в том, что если я не запустил приложение один раз на сервере, все тесты юнитов провалились.
Если я сначала запустил приложение на сервере (и остановил его), мои модульные тесты будут работать.
Без запуска сервера я получаю следующую ошибку:
... java.io.FileNotFoundException: class path resource [META-INF/spring/applicationContext-test.xml] cannot be opened because it does not exist
Мой юнит-тест определяется следующим образом:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/META-INF/spring/applicationContext-test.xml" })
@TransactionConfiguration
@Transactional
public class InventoryControllerTest extends AbstractTransactionalJUnit4SpringContextTests {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
private AnnotationMethodHandlerAdapter handlerAdapter;
@Before
public void setUp() throws Exception {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
handlerAdapter = applicationContext
.getBean(AnnotationMethodHandlerAdapter.class);
}
//... tests
}
Как я уже сказал, если я запустил приложение один раз, все работает нормально.
Итак, я изменил расположение конфигурации на
location = {"classpath / META-INF / spring / applicationContext-test.xml"})
Но без усилий, то же исключение, как указано выше.
Единственный способ продвинуться дальше - это место:
location = {"classpath *: applicationContext-test.xml"})
Тогда я получаю это исключение:
Не найден соответствующий компонент типа [javax.sql.DataSource] для зависимости: ожидается как минимум 1 компонент, который считается кандидатом для автоматической передачи для этой зависимости. Аннотации зависимостей: {}
Но это сбивает с толку, потому что у меня определенно есть источник данных в моем тестовом файле контекста:
<bean class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" id="dataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:mem:testdb;sql.syntax_ora=true" />
<property name="username" value="some" />
<property name="password" value="some" />
</bean>
EIDT 2
После признания, что проблема заключается в RunWith (...) и одновременном расширении класса Spring и удалении всех подстановочных знаков из пути расположения. Я получаю это исключение:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [META-INF/spring/applicationContext-test.xml]: Cannot resolve reference to bean 'entityManagerFactory' while setting bean property 'entityManagerFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/applicationContext-test.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No persistence unit with name 'persistenceUnitTest' found
... 24 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/applicationContext-test.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No persistence unit with name 'persistenceUnitTest' found
... 40 more
Caused by: java.lang.IllegalArgumentException: No persistence unit with name 'persistenceUnitTest' found)
... 47 more
Буду очень признателен за любую помощь!
Заранее спасибо