Spring 3 @Autowire в тестах

У меня есть одна раздражающая проблема прямо сейчас. Мои тесты терпят неудачу из-за autowire.

Не удалось автоматически связать поле: private k.dao.CompanyDao k.dao.CompanyDaoTest.companyDao; вложенным исключением является org.springframework.beans.factory.NoSuchBeanDefinitionException: для зависимости не найдено соответствующего bean-компонента типа [k.dao.CompanyDao]: ожидается по крайней мере 1 bean-компонент, который квалифицируется как кандидат autowire для этой зависимости.

Я думаю, что @ContextConfiguration может быть проблемой?

Тест

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:**/servlet-context.xml", "classpath:**/root-context.xml", "classpath:**/ccc-jpa.xml" })
public final class CompanyDaoTest {

    @Autowired
    private CompanyDao companyDao;

    @Test
    public void testTest() {

    }
}

КомпанияДао

public interface CompanyDao extends GenericDao<Company> {

}

КомпанияDaoJpa

@Repository("companyDao")
public class CompanyDaoJpa extends GenericDaoJpa<Company> implements CompanyDao {

    public CompanyDaoJpa() {
        super(Company.class);
    }
}

ОбщийДао

public interface GenericDao<T extends DomainObject> {

    public T get(Long id);

    public List<T> getAll();

    public T save(T object);

    public T delete(T object);

}

servlet-context.xml

    <annotation-driven />

    <context:component-scan base-package="k"/>

person Kronis    schedule 17.11.2011    source источник
comment
Как выглядят другие конфигурации Spring XML?   -  person tobiasbayer    schedule 17.11.2011


Ответы (1)


Я думаю, ваш тест вообще не загружает servlet-context.xml.

Вы ссылаетесь на servlet-context.xml как на ресурс пути к классам, но servlet-context.xml обычно находится под WEB-INF, который не является частью пути к классам приложения. Обратите внимание, что Spring не жалуется на отсутствующие файлы конфигурации, когда на них ссылаются с помощью подстановочных знаков ( classpath:**/servlet-context.xml), так что ваш тест запускается автоматически, даже если файлы конфигурации не могут быть найдены.

Нет хороших способов получить доступ к XML-файлам Spring, расположенным в WEB-INF, из модульных тестов. Если вы хотите запустить для них тесты, вам нужно переместить их в путь к классам (т. е. что-то вроде src или resources, в зависимости от макета вашего проекта). Поскольку DispatcherServlet и ContextLoaderListener ожидают найти эти файлы под WEB-INF, вам также необходимо перенастроить их, используя соответствующие параметры contextConfigLocation. Например, в случае DispatcherServlet:

<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:**/servlet-config.xml</param-value>
</init-param>
person axtavt    schedule 17.11.2011
comment
Спасибо, это была проблема :) - person Kronis; 17.11.2011