Я тестирую весеннее приложение atm. Во-первых, проблема в том, что если я не запустил приложение один раз на сервере, все юнит-тесты терпят неудачу. Если я сначала запускаю приложение на сервере (и останавливаю его), мои модульные тесты работают.
Без запуска сервера я получаю следующую ошибку:
... 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" }) Затем я получаю это исключение: для зависимости не найден соответствующий bean-компонент типа [javax.sql.DataSource]: ожидается не менее 1 bean-компонент, который квалифицируется как кандидат автоподключения для этой зависимости. Аннотации зависимостей: {}
Но это сбивает с толку, потому что у меня определенно есть источник данных в моем тестовом файле контекста:
<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>
ЭИДТ 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
Я был бы очень признателен за любую помощь!
заранее спасибо