六、搭建你的测试项目
前面,我门已经完成了持久的搭建工作,接下来要做的就是测试。这里我才用轻量级的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目录内,如下图: