2017-08-13 17 views
0

こんにちは私は韓国に住む大学生です。 私はこのプロセスを勉強していましたが、私が作業しているプロジェクトのユニットテスト(Junit)中にエラーが発生しましたSpring Junit4テストエラー:データソースが指定されていません

私は3日間Googleingを試みましたが、うまくいかなかった。だから、私は助けが必要です。

これはUserDaoTestでうまくいきます。ただし、BoardDaoTestの1つのメソッドはテストされていません。私はここに私のソースコードを添付します。

  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 Integrationテストの目的を破っています。既存の@Autowiredメソッドを使用して、代わりにテストコンテキストから取得します。
+0

ありがとうございます。ただし、データソースの指定されたエラーはありません。 –

0

あなたはデータソースのない初期化されたものでAutowired DAOを置き換えています。あなたはあなたのセットアップ方法でそうしています。それがあなたの問題です。

セットアップ方法からカスタムのものを削除します。 Autowiredアノテーションを削除して、セットアップメソッドがそれらを正しく構築することを確認してください。

関連する問題