六、搭建你的测试项目
前面,我门已经完成了持久的搭建工作,接下来要做的就是测试。这里我才用轻量级的NUnit作为单元测试工具
、创建项目OfficeTes,项目类型为类库,如下:
2、安装NUnit-2.4.7-net-2.0.msi,记住安装目录位置,后面有用
3、在测试项目里添加对NUnit的引用,当然还有被测试项目(OfficeDAL)以及依赖项目(OfficeModel)的引用
完成后情况如上面的图示
4、在测试项目中添加NHibernate的配置文件hibernate.cfg.xml,文件内容如下
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" > <session-factory name="NHibernate.Test"> <property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider, NHibernate</property> <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property> <property name="connection.connection_string">Data Source=ORCL;Persist Security Info=True;User ID=MACK;PWD=MACK;Unicode=True</property> <property name="query.substitutions">true 1, false 0, yes 1, no 0</property> <property name="dialect">NHibernate.Dialect.OracleDialect</property> <property name="show_sql">true</property> <mapping assembly="OfficeModel"/> </session-factory> </hibernate-configuration>
使用过Hibernate的同志应该都知道上面配置的含义,这里我不再赘述,有一点需要说明的是,对于上面的驱动类NHibernate.Driver.OracleClientDriver和方言NHibernate.Dialect.OracleDialect,
这些类都是可以在NHibernate.dll中可以找到的,你可以用对象浏览器打开NHibernate.dll,找到上面的类
5、NHibernate的日志处理采用Log4Net,如果您需要看到Nhibernate的日志输出,请在测试项目里添加App.config文件,文件里面添加Log4Net的相关配置
配置内容如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <root> <level value="INFO" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> <logger name="NHibernate"> <level value="DEBUG"/> </logger> <logger name="NHibernate.SQL"> <level value="DEBUG"/> </logger> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="false" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]/r/n"/> <param name="Footer" value="[Footer]/r/n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="WARN" /> </filter> </appender> </log4net> </configuration>
6.编写我们的测试类,这里我准备对前面持久层项目OfficeDAL的BaseService类的方法进行测试,于是,我编写了BaseServiceTest类
using System; using System.Collections.Generic; using System.Text; using OfficeDAL; using NUnit.Framework; using OfficeModel; namespace OfficeTest { [TestFixture] public class BaseServiceTest { public BaseServiceTest() { //将log4net输出到NUnit控制台 log4net.Config.XmlConfigurator.Configure(); } BaseService service = new BaseService(); /// <summary> /// 对BaseService的Persist方法进行测试,向数据库插入2000个用户信息 /// </summary> [Test] public void TestPersist() { for (int i = 1; i <= 2000; i++) { OfficeModel.USERINFO user = new OfficeModel.USERINFO(); user.USERNAME = "tom_"+i.ToString(); service.Persist(user); } } /// <summary> /// 查询所有的测试 /// </summary> [Test] public void TestFindAll() { foreach (USERINFO user in service.findAll<USERINFO>()) { Console.WriteLine(user.USERNAME); } } } }
7.为了使NUnit技能用于测试,又能用于调试,我们对测试项目作如下配置
7.1.在项目OfficeTest上鼠标右键-->属性---调试,出现如下界面
启动操作项选择"启动外部程序" ,指向NUnit.exe的安装路径,启动选项的“命令行参数”填写测试项目编译后的dll文件名
启动选项的“工作目录”填写测试项目的调试目录。
OK,到此,我们已经可以测试、调试我们的项目了,您可以在测试项目里面设置断点,然后按F5开始调试,或者Ctrl+F5直接运行测试
绿色表示测试成功
7.2.几个注意事项:
hibernate.cfg.xml的属性"复制到输出目录"必须设置为始终复制
App.config中关于NHibernate的日志级别关系到测试速度快与慢
hibernate.cfg.xml中的数据库连接字符串必须正确,这一点可以通过“服务器资源管理器”得到应证。
<logger name="NHibernate"> <level value="INFO"/> </logger> <logger name="NHibernate.SQL"> <level value="INFO"/> </logger>
8、要使Web项目能够正常运行并访问持久层,必须将测试项目下的hibernate.cfg.xml文件拷贝到Web项目下的Bin目录内,如下图: