2017-08-13 31 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註釋並確保您的設置方法正確構建它們。