按Lee的原例实现的测试解决方案。是进行以后各部分学习的基础。
(一)建立Domain类库项目。
这个项目主要用于持久类与嵌入的映射文件的存在库。
还以Customer为例子。
·数据库中主要的三个字段:customerid,firstname,lastname
·持久类Customer的属性:Unid(这里用Unid,不用与数据库的customerid,主要目的是更好的理解mapping关系);FirstName;LastName
·引用类库:可能会用到Iesi.Collections.dll
这里代码我就不贴了。
说明:映射文件要是嵌入的类型。
(二)建立Data类库项目。
这个项目主要用于建立数据(NHB)与Mapping的关系。
·NHBHelper类:用于获取ISession(NHB工作单元)
·NHBControl类:用于数据逻辑(Isession——mapping)
·NHibernate.cfg.xml:用于配置数据库类型、映射类及其它。(现在好多节点没深入理解意思)
·引用类库:NHibernate.dll;Castle.DynamicProxy2.dll(Castle代理必须);Domain.dll(持久类及mapping)
贴出两个类:
public class NHBHelper
    {
        private ISessionFactory SessionFactory;
        public NHBHelper():this(@"E:\test8\NHBTraffic\Data\NHibernate.cfg.xml")
        { }
        public NHBHelper(string strPath)
        {
            SessionFactory=GetCurrentSession(strPath);
        }
        private ISessionFactory GetCurrentSession(string strPath)
        {
            return (new Configuration()).Configure(strPath).BuildSessionFactory();
        }
        public ISession GetSession()
        {
            return SessionFactory.OpenSession();
        }
}
注意:要注意NHibernate.cfg.xml文件的路径。因为这个示例还要在Web项目里应用,所以我设置了路径
public class NHBControl
    {
        #region Init
        private ISession _Session;
        NHBHelper helper = new NHBHelper();
        #endregion
 
        #region create
        public NHBControl()
        {
            _Session = helper.GetSession();
        }        
    #endregion
}
这个类没有什么可说明的。
(三)建立SelfTest类库
主要用于测试
我添加了一个TestHql类,用于测试。
·引用类库:Domain.dll;Data.dll;nunit.framework.dll
(四)为解决方案新建网站Web
·引用类库为:Domain.dll;Data.dll
(五)测试
测试(1)通过Unid返回Customer实例
NHBControl类
public Customer GetCustomerById(int Iid)
{
return _Session.Get<Customer>(Iid);
}
TestHql类
[Test]
public void TestGetOne()
{
  Customer customer = cc.GetCustomerById(100);
  Assert.IsNull(customer);
}
 
Web页
protected void Page_Load(object sender, EventArgs e)
{
  Customer customer = cc.GetCustomerById(1);
  string s = customer.FirstName;
  Response.Write(s);
}
成功。
如果要添加其它的数据操作及hql测试,我全加在NHBControl类
而测试就在TestHql类进行。
好了,有了这个解决方案,以后的测试可以明了的进行了。
 这里不提供源码下载,因为想让大家自己手动建立测试项目,并且自己调度通过,来解决其中的各个问题。
参考Lee的系列。详细请参见 YJingLee's blog。
http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号