java Spring Junit4测试错误:未指定数据源
你好,我是一名住在韩国的大学生。 我一直在研究这个过程,在我正在进行的项目的单元测试(Junit)过程中,我发现了一个错误
我用谷歌搜索了3天,但没有成功。所以,我需要帮助
这对UserDaoTest很有效。但是,有一种测试方法未经测试。我在这里附上我的源代码
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!"); } { ... }
应用程序上下文。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>
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 { { ... } }
考试。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())); }
# 1 楼答案
代码中的一些问题:
viser.service.support.jdbc.JdbcTemplate
。这是个坏习惯。使用现有Spring的JdbcTemplate李>@Before
方法的测试类中,您正在手动初始化DAO:new BoardDAO() / new ProjectDAO()
。这违背了进行Spring集成测试的目的。改为使用现有的@Autowired
方法从测试上下文获取它们李># 2 楼答案
您正在用自己的初始化DAO替换自动连接DAO,这些DAO缺少数据源。您正在使用设置方法执行此操作。这是你的问题
从该设置方法中删除自定义设置;或者删除自动连线批注,并确保安装方法正确构造它们