NHibernate+WCF项目实战 

第一篇、项目介绍与搭建

第二篇、使用NHibernate实现数据访问并进行单元测试

第三篇、使用WCF对外提供Webservices接口并进行单元测试;

第四篇、使用WAS对Webservices接口进行压力测试。

开发环境

    我的开发环境是VS2008 SP1+SQLServer 2005

    NHibernate版本是2.1.0.4000

  NUnit版本是2.5.2

  Microsoft Web Application Stress Tool 版本是1.1 

本节概要

    上一篇已经搭建了包含6个项目的解决方案,本节主要完成实体层和数据访问层的开发工作,同时使用NUnit对数据访问层中的方法进行单元测试。

准备工作

    学习NHibernate

    1)推荐系列文章NHibernate之旅

    2)博客园也刚刚成立了NHibernate专题

    您可以先从sourceforge下载本项目需要的NHibernate程序集。下载以后Required_Bins下面是必须的程序集。Required_For_LazyLoading下面是延迟加载的三种方案所需的程序集。

开发Model

using

    添加对NHibernate.dll的引用。

O/R Mapping

    Model层主要是解决O/R Mapping

    R:我们在上一篇文章中已经建立了表UserInfo。

    O:创建UserInfo对应的实体,UserInfo.cs。

   

NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System.Collections.Generic;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试namespace Lee.Model
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试{
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
/// <summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
///    
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
/// </summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
[Serializable]
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
public class UserInfo
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
public UserInfo()
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            m_Id 
= 0;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            m_Name 
= null;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            m_Description 
= null;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            m_State 
= null;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        private 
int m_Id;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        private string m_Name;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        private string m_Description;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        private string m_State;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///<summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///</summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
public virtual int Id
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            get { 
return m_Id; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            
set { m_Id = value; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///<summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///</summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
public virtual string Name
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            get { 
return m_Name; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            
set { m_Name = value; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///<summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///</summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
public virtual string Description
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            get { 
return m_Description; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            
set { m_Description = value; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///<summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
///</summary>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
public virtual string State
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            get { 
return m_State; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            
set { m_State = value; }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试}
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试

    Mapping:创建映射文件UserInfo.hbm.xml,并设置为嵌入的资源始终复制

   

NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试<?xml version="1.0" encoding="utf-8" ?>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<class name="Lee.Model.UserInfo, Lee.Model" table="UserInfo">
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<id name="Id" column="id" type="Int32" unsaved-value="0">
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试      
<generator class="native"/>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
</id>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
<property name="Name" type="String" column="name " />
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
<property name="Description" type="String" column="description " />
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        
<property name="State" type="String" column="state " />
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
</class>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
</hibernate-mapping>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试

开发DAL

    using

    添加对NHibernate.dll的引用。

    添加对Lee.Model项目的引用。

    创建NHibernate的Session辅助类,SessionFactory。

NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using System.Collections.Generic;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using System.Linq;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using System.Text;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using NHibernate;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using NHibernate.Cfg;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
namespace Lee.DAL

不知道NHibernateSession怎么用的请系统学习我推荐地址的文章。我在这里就不做重复介绍了!

创建UserInfo的数据访问类UserInfoDAL

主要定义了三个方法:添加用户、修改用户信息和检查用户是否存在。

这三个方法也是WCF将要对外提供的用户操作方法,考虑到删除操作的特殊性,不对外提供删除接口。

下面是UserInfoDAL的代码:

NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using System.Collections.Generic;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using System.Linq;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using System.Text;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using Lee.Model;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using NHibernate.Cfg;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
using NHibernate;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
namespace Lee.DAL

到这里我们已经完成了实体层和数据访问层的开发工作,下面我们用NUnit进行单元测试。

单元测试

    安装NUnit

        下载:http://www.nunit.org/index.php?p=download

    using

        添加对NHibernate.dll的引用。

        添加对NHibernate.ByteCode.Castle的引用。

        添加对nunit.framework的引用。

        添加对Lee.Model项目的引用。

        添加对Lee.DAL项目的引用。

    copy以下程序集到\Lee.Test\bin\Debug下

    NHibernate.dll

    NHibernate.ByteCode.Castle.dll

    Antlr3.Runtime.dll

    Iesi.Collections.dll

    log4net.dll

    Castle.DynamicProxy2.dll

    Castle.Core.dll

  测试步骤

1)创建NHibernate配置文件hibernate.cfg.xml并设置为始终复制。

NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试<?xml version="1.0" encoding="utf-8" ?>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
<hibernate-configuration xmlns='urn:nhibernate-configuration-2.2'>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试  
<session-factory>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<property name="show_sql">true</property>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<property name="connection.connection_string_name">SQLConnection</property>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<mapping assembly="Lee.Model"/>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试  
</session-factory>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
</hibernate-configuration>

    你需要自己配置以下节点:

     数据库连接

     <property name="connection.connection_string_name">SQLConnection</property>

    mapping

   <mapping assembly="Lee.Model"/>  

2)创建应用程序配置文件App.config,设置数据库连接。

 

NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试<?xml version="1.0" encoding="utf-8" ?>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
<configuration>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试  
<connectionStrings>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    
<add name="SQLConnection" connectionString="Database=XX;User ID=sa;Password=saas;Server=XX;" providerName="System.Data.SqlClient"/>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试  
</connectionStrings>
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
</configuration>

3)创建测试类TestUserInfoDAL

NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System.Collections.Generic;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System.Linq;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using System.Text;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using Lee.Model;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using Lee.DAL;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试using NUnit.Framework;
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试namespace Lee.Test
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试{
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    [TestFixture]
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    public class TestUserInfoDAL
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        [Test]
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        public void AddUserInfo()
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            UserInfoDAL dal = new UserInfoDAL();
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            bool result = dal.AddUserInfo("testname4", "testdesc", "teststate");
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            Assert.AreEqual(true, result);
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        [Test]
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        public void ExistUserInfo()
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            UserInfoDAL dal = new UserInfoDAL();
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            bool result = dal.ExistUserInfo("testname");
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            Assert.AreEqual(true, result);
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        [Test]
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        public void UpdateUserInfo()
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        {
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            UserInfoDAL dal = new UserInfoDAL();
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            bool result = dal.UpdateUserInfo("testname", "hello,testname!", "activation");
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试            Assert.AreEqual(true, result);
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试        }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试    }
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试}
NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试

4)设置项目 Lee.Test调试时启动NUnit。

    NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试

5)设置该项目为启动项目,在测试方法中设置断点,项目启动后,会开启NUnit。

   NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试

    选择要测试的方法,Run即可单步调试程序了!

   如果程序出现异常或者断言结果不相等(Assert.AreEqual)会出现红色进度条。 进度条下面有异常提示。

   NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试

    如果程序成功执行,当然就是一片绿了。

    NHibernate+WCF项目实战(二)使用NHibernate实现数据访问并进行单元测试

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-16
  • 2021-10-17
  • 2022-12-23
猜你喜欢
  • 2021-09-18
  • 2022-12-23
  • 2022-03-01
  • 2022-12-23
  • 2021-12-15
  • 2021-08-29
  • 2021-10-17
相关资源
相似解决方案