2017-08-13 22 views
0

你好,我是一名大学生住在韩国。 我一直在研究这个过程,并在我正在进行的项目的单元测试(Junit)期间出现错误春Junit4测试错误:没有数据源指定

我尝试Googleing 3天,但没有成功。所以,我需要帮助。

这非常适用于UserDaoTest。但是,BoardDaoTest的一种方法未经测试。我在这里附上我的源代码。

  1. JdbcTemplate.java

    public class JdbcTemplate extends JdbcDaoSupport { 
         private static final Logger logger = LoggerFactory.getLogger(JdbcTemplate.class); 
    
         public static Connection conn; 
         public PreparedStatement pstmt; 
         public PreparedStatement pstmt2; 
         public ResultSet rs; 
    
         @PostConstruct 
         public void initialize() { 
         DataSource ds = getDataSource(); 
         logger.info("get Data Source success!"); 
         conn = DataSourceUtils.getConnection(ds); 
         logger.info("Conn = " + conn); 
         logger.info("database initialized success!"); 
         } { ... } 
    
  2. 的applicationContext.xml

    <context:annotation-config /> 
    
    <context:property-placeholder location="classpath*:application-properties.xml" /> 
    
    <bean id="applicationContextProvider" class="viser.service.ApplicationContextProvider" /> 
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
        p:driverClassName="${database.driverClassName}" 
        p:url="${database.url}" 
        p:username="${database.username}" 
        p:password="${database.password}" 
    /> 
    
    <bean id="jdbcTemplate" class="viser.service.support.jdbc.JdbcTemplate" 
        p:dataSource-ref="dataSource" 
    /> 
    
    <bean id="userDAO" class="viser.dao.user.UserDAO"> 
        <property name="dataSource" ref="dataSource" /> 
    </bean> 
    
    <bean id="boardDAO" class="viser.dao.board.BoardDAO"> 
        <property name="dataSource" ref="dataSource" /> 
    </bean> 
    

  3. UserDAOTest.java(成功测试)

    @RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration("classpath:/applicationContext.xml") 
    public class UserDAOTest { 
    
        @Autowired 
        private UserDAO userDAO; 
        private User user; 
    
        @Before 
        public void setUp() { 
        user = UserTest.TEST_USER; 
        } 
    
        @After 
        public void returns() throws SQLException { 
        userDAO.removeUser(user.getUserId()); 
        } 
    
        @Test 
        public void crud() throws Exception { 
        { ... } 
        } 
    
        @Test 
        public void getWhenNotExsitUser() throws Exception { 
        { ... } 
        } 
    
  4. BoardDAOTest.java(CRUD() - >成功的GetList() - >失败)

    @RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration("classpath:/applicationContext.xml") 
    public class BoardDAOTest { 
    private static final Logger logger = LoggerFactory.getLogger(BoardDAOTest.class); 
    
    public static Board TEST_BOARD = new Board("TEST_BOARD", 
    `ProjectDAOTest.TEST_PROJECT.getProjectName());` 
          @Autowired 
          private BoardDAO boardDAO; 
          private ProjectDAO projectDAO; 
    
          @Before 
          public void setup() throws SQLException { 
          boardDAO = new BoardDAO(); 
          projectDAO = new ProjectDAO(); 
          projectDAO.addProject(ProjectDAOTest.TEST_PROJECT); 
          } 
    
          @After 
          public void returns() throws SQLException { 
          projectDAO.removeProject(ProjectDAOTest.TEST_PROJECT.getProjectName()); 
          } 
    
          @Test 
          public void crud() throws SQLException { 
          {...} 
          } 
    
          @Test 
          public void getList() throws SQLException { 
          logger.debug("list : {}", boardDAO.getBoardList(ProjectDAOTest.TEST_PROJECT.getProjectName())); assertNotNull(boardDAO.getBoardList(ProjectDAOTest.TEST_PROJECT.getProjectName())); 
         } 
    

(errorImageFile)

回答

0

的几个问题与您的代码:

  1. 您正在定义自己的viser.service.support.jdbc.JdbcTemplate。这是不好的做法。使用现有的Spring的JdbcTemplate
  2. 在您的测试类在@Before方法,则需要手动初始化你的DAO:new BoardDAO()/new ProjectDAO()。这破坏了进行Spring集成测试的目的。使用现有的@Autowired方法,而不是从测试上下文中获取它们。
+0

谢谢你,但我不会解决任何数据源指定的错误..:( –

0

你与你自己的初始化那些被遗漏的数据源更换自动装配Autowired的DAO。你在你的设置方法中这样做。这是你的问题。

从用于设置方法的自定义的;或删除Autowired注释并确保您的设置方法正确构建它们。