Nhibernate测试驱动开发Word文件下载.docx

上传人:b****5 文档编号:19703956 上传时间:2023-01-09 格式:DOCX 页数:52 大小:35.12KB
下载 相关 举报
Nhibernate测试驱动开发Word文件下载.docx_第1页
第1页 / 共52页
Nhibernate测试驱动开发Word文件下载.docx_第2页
第2页 / 共52页
Nhibernate测试驱动开发Word文件下载.docx_第3页
第3页 / 共52页
Nhibernate测试驱动开发Word文件下载.docx_第4页
第4页 / 共52页
Nhibernate测试驱动开发Word文件下载.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

Nhibernate测试驱动开发Word文件下载.docx

《Nhibernate测试驱动开发Word文件下载.docx》由会员分享,可在线阅读,更多相关《Nhibernate测试驱动开发Word文件下载.docx(52页珍藏版)》请在冰豆网上搜索。

Nhibernate测试驱动开发Word文件下载.docx

三持久化操作

1.会话和会话工厂

要进行持久化操作,必须先取得ISession和ISessionFactory,我们用一个Sessions类来封装它们,Sessions类的属性和方法都是静态的,它有一个Factory属性,用于返回ISessionFactory,有一个GetSession方法,用于取得一个新的ISession。

测试类代码如下:

style="

BORDER-RIGHT:

black1pxsolid;

PADDING-RIGHT:

4px;

BORDER-TOP:

PADDING-LEFT:

PADDING-BOTTOM:

BORDER-LEFT:

PADDING-TOP:

BORDER-BOTTOM:

BACKGROUND-COLOR:

#ededed"

usingSystem;

usingNUnit.Framework;

usingNHibernate;

namespaceNHibernateTest

{

///

///SessionsFixture的摘要说明。

///

[TestFixture]

publicclassSessionsFixture

{

publicSessionsFixture()

//

//TODO:

在此处添加构造函数逻辑

}

[Test]//测试能否取得NHB会话工厂。

publicvoidFactoryTest()

ISessionFactorysf=Sessions.Factory;

Assert.IsNotNull(sf,"

getsessionfactoryfail!

"

);

[Test]//测试能否取得NHB会话。

publicvoidGetSessionTest()

ISessions=Sessions.GetSession();

Assert.IsNotNull(s,"

getsessionfail!

}

 

现在还没写Sessions类,将不能通过编译!

下面我们来实现Sessions类.

usingSystem.Reflection;

///Sessions的摘要说明。

publicclassSessions

privatestaticreadonlyobjectlockObj=newobject();

privatestaticISessionFactory_factory;

publicSessions()

publicstaticISessionFactoryFactory

get

if(_factory==null)

lock(lockObj)

NHibernate.Cfg.Configurationcfg=newNHibernate.Cfg.Configuration();

cfg.AddAssembly(Assembly.GetExecutingAssembly());

_factory=cfg.BuildSessionFactory();

return_factory;

publicstaticISessionGetSession()

returnFactory.OpenSession();

OK,现在编译可以通过了,启动NUnit并选择生成的文件NHibernateTest.exe,运行测试。

我们得到了红色的条,出错了!

原来还没有加入NHibernate的配置信息(当使用NHibernate时,需要在项目的配置文件中加入NHibernate的配置信息。

关于配置信息,在下面有说明)。

在项目的配置文件App.Config(如没有请自行创建一个)中加入以下内容.

稍做解释,下面的配置文件主要是配置了NHibernate和log4net,例如配置了NHibernate连接数据库的连接字符串;

log4net把日志记到哪个文件中,本例就是"

log.txt"

每次写日志向文件中追加,而不是重写

xmlversion="

1.0"

encoding="

utf-8"

?

>

<

configuration>

<

configSections>

sectionname="

nhibernate"

type="

System.Configuration.NameValueSectionHandler,System,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"

/>

log4net"

log4net.Config.Log4NetConfigurationSectionHandler,log4net"

configSections>

nhibernate>

add

key="

hibernate.show_sql"

value="

true"

hibernate.connection.provider"

NHibernate.Connection.DriverConnectionProvider"

hibernate.dialect"

NHibernate.Dialect.MsSql2000Dialect"

hibernate.connection.driver_class"

NHibernate.Driver.SqlClientDriver"

hibernate.connection.connection_string"

Server=127.0.0.1;

initialcatalog=Northwind;

Userid=golinjoe;

Password=2525775"

nhibernate>

log4net>

appendername="

rollingFile"

log4net.Appender.RollingFileAppender,log4net"

>

paramname="

File"

AppendToFile"

RollingStyle"

Date"

DatePattern"

yyyy.MM.dd"

StaticLogFileName"

layouttype="

log4net.Layout.PatternLayout,log4net"

ConversionPattern"

%d[%t]%-5p%c[%x]<

%X{auth}>

-%m%n"

layout>

appender>

root>

priorityvalue="

ALL"

appender-refref="

root>

log4net>

再次运行测试,就可以看见绿色的条了。

在取得会话工厂的代码中,我使用了如下代码:

if(_factory==null){

lock(lockObj){

//buildsessionfactorycode;

}

这是一个典型的doublelock方式,用来产生线程安全的Singletion(单例)对象。

2.基本CRUD操作

在很多介绍NHB的文章,包括NHB带的测试用例中,业务对象只是做为一个数据实体存在的,它没有任何操作!

这在java中是比较典型的作法。

而我希望我们的业务对象自身就能完成基本的Create/Retrieve/Update/Delete,即CRUD操作,

在罗斯文商贸应用中,存在客户(customer)业务对象,先来为它建立一个测试用例,

///CustomerFixture的摘要说明。

publicclassCustomerFixture

publicCustomerFixture()

{}

[Test]//测试Customer对象的CRUD操作。

publicvoidTestCRUD()

Customerc=newCustomer();

c.CustomerId="

test"

;

c.CompanyName="

companyname"

c.ContactName="

contactname"

c.Address="

address"

c.Create();

//测试insert操作,

Customerc2=newCustomer(c.CustomerId);

//测试retrieve操作.

Assert.AreEqual(c2.CompanyName,"

"

savecompanynamefail!

"

c2.CompanyName="

updatename"

c2.Update();

//测试update操作.

Customerc3=newCustomer(c.CustomerId);

Assert.AreEqual(c3.CompanyName,"

updatecompanynamefail!

c3.Delete();

//测试delete操作.

接下来创建Customer业务类:

///Customer的摘要说明。

publicclassCustomer:

BizObject

publicCustomer(){}

publicCustomer(stringexistingId):

base(existingId){}

#regionpersistentproperties.

privatestring_customerId=string.Empty;

privatestring_companyName=string.Empty;

privatestring_contactName=string.Empty;

privatestring_contactTitle=string.Empty;

privatestring_address=string.Empty;

privatestring_city=string.Empty;

privatestring_region=string.Empty;

privatestring_postalCode=string.Empty;

privatestring_country=string.Empty;

privatestring_phone=string.Empty;

privatestring_fax=string.Empty;

publicstringCustomerId

get{return_customerId;

set{_customerId=value;

publicstringCompanyName

get{return_companyName;

set{_companyName=value;

publicstringContactName

get{return_contactName;

set{_contactName=value;

publicstringContactTitle

get{return_contactTitle;

set{_contactTitle=value;

publicstringAddress

get{return_address;

set{_address=value;

publicstringCity

get{return_city;

set{_city=value;

publicstringRegion

get{return_region;

set{_region=value;

publicstringPostalCode

get{return_postalCode;

set{_postalCode=value;

publicstringCountry

get{return_country;

set{_country=value;

publicstringPhone

get{return_phone;

set{_phone=value;

publicstringFax

get{return_fax;

set{_fax=value;

#endregion

在Customer类中,没有实现CRUD操作,这些操作在业务对象基类BizObject中实现,代码如下:

///BizObject的摘要说明。

publicclassBizObject

publicBizObject(){}

publicBizObject(objectexistingId)

ObjectBroker.Load(this,existingId);

publicvirtualvoidCreate()

ObjectBroker.Create(this);

publicvirtualvoidUpdate()

ObjectBroker.Update(this);

publicvirtualvoidDelete()

ObjectBroker.Delete(this);

BizObject简单的将数据操作转发至ObjectBroker类,目的是为了降低业务层和NHB之间的耦合,以利于持久层间的移植。

bl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1