Spring 3 @Autowire в тестах - PullRequest
       9

Spring 3 @Autowire в тестах

0 голосов
/ 17 ноября 2011

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

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

Я думаю, что @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() {

    }
}

CompanyDao

public interface CompanyDao extends GenericDao<Company> {

}

CompanyDaoJpa

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

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

GenericDao

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"/>

1 Ответ

5 голосов
/ 17 ноября 2011

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

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

Нет хороших способов доступаSpring XML-файлы, расположенные в 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>
...