2015-06-15 2 views
1

Я хочу написать тест Junit для DAO. Проект работает сам. Все классы и методы работают. Все данные из теста правильно. Почему это плохо?Тесты Junit на Java (Spring, MVC) для DAO и службы

Исключение --- Не удалось автополе поле: private com.epam.edu.jtc.dao.CoursesDAOImpl com.epam.edu.jtc.test.CourseTest.coursesDao; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: не существует определяющего компонента типа [com.epam.edu.jtc.dao.CoursesDAOImpl], найденного для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат autwire для этой зависимости. Зависимость от аннотаций: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = истина)}

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:test-context.xml" }) 

public class CourseTest 
{ 
@Autowired 
private CoursesDAOImpl coursesDao; 

@Test 
public void testFindCourseById() 
{ 
    Course course = coursesDao.findCourseById(322); 

    Assert.assertEquals("Python", course.getName()); 
    Assert.assertEquals("Development Manager", course.getCategory()); 
    Assert.assertEquals("python.com", course.getLinks()); 
    return; 
} 
} 

тест-context.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
xmlns:security="http://www.springframework.org/schema/security" 
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

<!-- the test application context definition for the jdbc based tests --> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close" 
    p:driverClassName="org.h2.Driver" 
    p:url="jdbc:h2:tcp://localhost:9092/~/QWE;INIT=create schema if not exists QWE\;" 
    p:username="sa" 
    p:password="" 
    /> 

CoursesDAO.java

public interface CoursesDAO { 

    public Course findCourseById(Integer key); 
    } 

КурсыDAOImpl.java

@Repository 
public class CoursesDAOImpl implements CoursesDAO { 

@Autowired 
private SessionFactory sessionFactory; 

public Course findCourseById(Integer id) { 

    Session session = sessionFactory.getCurrentSession(); 
    session.beginTransaction(); 
    Course course = (Course) session.get(Course.class, id); 
    session.getTransaction().commit(); 

    return course; 
    } 
+3

Похоже, что ваш контекст для тестирования не позволяет автоматически сканировать компоненты. –

+0

<контекст: компонент-сканирование base-package = "com.mypackage" />

+0

добавлено и .. все-таки есть такое исключение – Dmitry88

ответ

-2

Вы должны autowire интерфейса, вместо класса реализации, например, так:

@Autowired 
private CoursesDAO coursesDao; 

Надеется, что это помогает.

Смежные вопросы