在一般的java工程中,很多人习惯自己写一个Test类,在这个类里面对各种逻辑层的方法进行简单的测试,这种方法在没有采用framework以前还算可行,但是如果要在自己的工程中间采用spring、hibernate的话这种方法就不可取了。
本人最近在一个项目中间就犯了这样的错误,当把spring、hibernate配置完了以后想简单测试下是否配置成功,于是自己写了一个简单的方法,取得hibernateTemplate结果无论怎么设计都返回空,直接交用DAO里面的CRUD方法都会报空指针错误。
问题的原因在于,spring如果要顺利工作必须成功加载applicationContext.xml文件,在配置好的web容器里面测试当然没有问题,因为applicationContext.xml已经被容器加载,spring和hibernate当然可以顺利运行,当脱离web容器单独测试的时候,简单的调用DAO的方法就会报错,这个时候spring的核心文件applicationContext.xml还没有成功加载,根本不可能成功连接数据库,更别指望DAO的方法可以顺利运行。
这个时候的测试就需要用的规范的单元测试,本人用的是eclipse自带的Junit,在单元测试里面的setUP()方法中加载spring的配置文件,然后再从ApplicationContext对象中取出DAO,这样就可以顺利的加载spring的配置文件,自然可以顺利运行DAO中的方法。