有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring Junit4测试错误:未指定数据源

你好,我是一名住在韩国的大学生。 我一直在研究这个过程,在我正在进行的项目的单元测试(Junit)过程中,我发现了一个错误

我用谷歌搜索了3天,但没有成功。所以,我需要帮助

这对UserDaoTest很有效。但是,有一种测试方法未经测试。我在这里附上我的源代码

  1. jdbc模板。爪哇

     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. 应用程序上下文。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. 考试。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)


共 (2) 个答案

  1. # 1 楼答案

    代码中的一些问题:

    1. 您正在定义自己的viser.service.support.jdbc.JdbcTemplate。这是个坏习惯。使用现有Spring的JdbcTemplate
    2. @Before方法的测试类中,您正在手动初始化DAO:new BoardDAO() / new ProjectDAO()。这违背了进行Spring集成测试的目的。改为使用现有的@Autowired方法从测试上下文获取它们
  2. # 2 楼答案

    您正在用自己的初始化DAO替换自动连接DAO,这些DAO缺少数据源。您正在使用设置方法执行此操作。这是你的问题

    从该设置方法中删除自定义设置;或者删除自动连线批注,并确保安装方法正确构造它们