天天看点

NHibernate+Oracle10g搭建一个项目架构全程解析(四)

六、搭建你的测试项目

     前面,我门已经完成了持久的搭建工作,接下来要做的就是测试。这里我才用轻量级的NUnit作为单元测试工具

、创建项目OfficeTes,项目类型为类库,如下:

NHibernate+Oracle10g搭建一个项目架构全程解析(四)

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上鼠标右键-->属性---调试,出现如下界面

NHibernate+Oracle10g搭建一个项目架构全程解析(四)

启动操作项选择"启动外部程序" ,指向NUnit.exe的安装路径,启动选项的“命令行参数”填写测试项目编译后的dll文件名

启动选项的“工作目录”填写测试项目的调试目录。

OK,到此,我们已经可以测试、调试我们的项目了,您可以在测试项目里面设置断点,然后按F5开始调试,或者Ctrl+F5直接运行测试

NHibernate+Oracle10g搭建一个项目架构全程解析(四)

绿色表示测试成功

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目录内,如下图:

NHibernate+Oracle10g搭建一个项目架构全程解析(四)