您的位置:首页 > 博客中心 > 数据库 >

NHibernate+NUnit (VS2012+SQL Server2008) (转)

时间:2022-03-10 17:15

源博客:http://blog.csdn.net/jiajiayouba/article/details/9877875

首先,你要明白,NHibernate在.NET中的作用和Hibernate在JAVA中的作用一样;第二,他们都是开源的东东;第三,他们都是一种对象关系数据库映射框架。第三点要好好理解哦,“对象”,.NET和java都是面向对象的,通俗点就是里面都是各种class类;“关系数据库”,MS SQL,ORACLE,etc,就是指的它们了;“映射“,就是在指hibernate在关系数据库和我们面向对象class之间搭起了一座桥梁。因此,有了这个,我们就可以轻松的使用面向对象的思维来编写数据层了,至于数据层如何与数据库打交道,就交给hibernate去处理了。那么NUnit 呢?这个简单,说白了,就一个测试工具,我们在里面写好测试代码,程序自动帮我们做测试,吼吼。说了那么多,其实,我也搞不明白,你们到底懂没懂……,至此,如果广大同胞们脑海中还是没有一丝波澜的话,那就请各位自己去拷打一番谷歌度娘吧。

由于NHibernate和NUnit 的东西实在太多,而小白我功力有限,所以,给大家推荐两个很好的博客,里面写的都很详细了:

1,NHibernate之旅系列文章导航 http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html

2,NHibernate从入门到精通系列http://www.cnblogs.com/GoodHelper/archive/2011/02/14/nhiberante_01.html

这两个博客里有些内容重叠了,但我还是建议大家都从头到尾好好读一下,毕竟我们是小白嘛,gxlsystem.com,布布扣

2,把自带的Class1.cs删掉,新建一个Student类。代码如下:

gxlsystem.com,布布扣gxlsystem.com,布布扣
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace Domain  
{  
    /// <summary>  
    /// 学生类  
    /// </summary>  
    public class Student  
    {  
        /// <summary>  
        /// ID  
        /// </summary>  
        public virtual int ID { get; set; }  
        /// <summary>  
        /// 学生姓名  
        /// </summary>  
        public virtual string Name { get; set; }  
        /// <summary>  
        /// 学生性别  
        /// </summary>  
        public virtual string Sex { get; set; }  
        /// <summary>  
        /// 学生年龄  
        /// </summary>  
        public virtual int Age { get; set; }  
    }  
}  
View Code

 

3,添加一个XML文件,取名为:Student.hbm.xml,如图:
gxlsystem.com,布布扣

 

此时,目录结构是这样的:

gxlsystem.com,布布扣

4,编写Student.hbm.xml 映射文件,代码如下:

gxlsystem.com,布布扣

6,在项目解决方案上右击,选择添加新建项目,添加一个新的类库,取名为:NHibernateTest。(其实,这就是我们利用UNit 进行单元测试的地方)如图:

gxlsystem.com,布布扣

将新建类库中默认的Class1.cs删掉,此时,目录结构是这样的:

gxlsystem.com,布布扣

7,在NHibernateTest 项目中,添加对我们刚才新建的Domain类库的引用,以及添加我们下载的NHibernate和NUnit 程序集的引用。如图:

gxlsystem.com,布布扣

gxlsystem.com,布布扣

gxlsystem.com,布布扣

引用添加完毕后,就是下面这个样子的,

gxlsystem.com,布布扣

10,把下载的NHibernate 中Configuration_Templates文件夹下的MSSQL.cfg.xml文件复制粘贴到NHibernateTest 类库中,并重命名为:hibernate.cfg.xml 并修改文件如下:

gxlsystem.com,布布扣gxlsystem.com,布布扣
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using NHibernate;  
using NHibernate.Tool.hbm2ddl;  
using NUnit.Framework;  
  
namespace NHibernateTest  
{  
    [TestFixture]  
    public class NHibernateInit  
    {  
        [Test]  
        public void InitTest()  
        {  
            var cfg = new NHibernate.Cfg.Configuration().Configure(System.AppDomain.CurrentDomain.BaseDirectory + "\\hibernate.cfg.xml");  
            new SchemaExport(cfg).Execute(true, true, false);  
            using (ISessionFactory sessionFactory = cfg.BuildSessionFactory()) { }  
        }  
    }  
}  
View Code

 

12,打开SQL Server 08,新建一个nhibernate 数据库 

create database nhibernate  

 

 13,在 NHibernateTest 类库上右键,选择属性,切换到”调试“选项卡,单击”启动外部调试“,浏览,选择Nunit.exe 程序。(注意:前提是你已经安装了文章开头时让你下载的Nunit 2.6.2.msi程序),效果如下图所示:

 

gxlsystem.com,布布扣

14,点击一下”全部保存“,然后在整个的项目解决方案上右键,选择”生成解决方案“。然后,将NHibernateTest 类库右键,设为启动项目。F5,运行程序

此时,我们看到NUnit.exe已经启动了,在NUnit窗口中,选择:"File"->”new project“,文件名为:NHibernateTest.nunit,点击保存。此时,窗口依然什么都没有。再选择:"Project"->"Add assembly",在弹出的对话框中,找到我们的NHibernateTest类库生成的dll文件,点击打开,如下图:

gxlsystem.com,布布扣

15,单击NUnit窗口中的Run按钮,此时,NUnit 会自动执行我们的NHibernateTest 类库中的方法。这时,窗口应该是下面这样的:

gxlsystem.com,布布扣

16,此时,打开数据库,会发现,我们的T_Student数据表已经被自动创建好了。

小伙伴们,你们有没有被惊呆呢?是不是很神奇的东东?哈哈……我发现写文章真是个体力活,受不了了……

唉,没办法,本着对广大的小伙伴尽职尽责的高度使命感,小白我决定继续码字……(鼓掌)

这样测试的话,每次我们都还要启动外部程序NUnit,相信有的小伙伴不乐意了,放心好了,我们可以通过安装插件的方式,解决这个问题(注意:此过程需联网)。

在 VS2012 中,选择:”工具“=》”扩展和更新“,在弹出的对话框中,单击”联机“标签,之后再在搜索框中输入:”NUnit“ ,回车,效果如下图所示:

gxlsystem.com,布布扣

选择”下载“,下载完毕后,会提示你安装,你直接选择安装就可以了。安装完毕后,重启一下VS。重启之后,选择菜单栏中的:”测试“-》”窗口“-》”测试资源管理器“。然后再重新生成一下整个项目解决方案,这时候,我们在”测试资源管理器“中就可以看到我们的NHibernateTest 测试类了。在这里,我们可以选择全部运行,也可以在单独的方法上右键,选择运行或调试。

下面,我又新写了几个测试方法,分别测试往T_Student表中存入数据,取出数据。NHibernateInit.cs 文件代码如下:

 

gxlsystem.com,布布扣gxlsystem.com,布布扣
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using NHibernate;  
using NHibernate.Tool.hbm2ddl;  
using NUnit.Framework;  
  
namespace NHibernateTest  
{  
    [TestFixture]//定义一个测试类,里面可以包含很多测试函数和初始化、销毁函数。  
    public class NHibernateInit  
    {  
        [Test]//定义一个独立的测试函数。  
        public void InitTest()  
        {  
            var cfg = new NHibernate.Cfg.Configuration().Configure(System.AppDomain.CurrentDomain.BaseDirectory + "\\hibernate.cfg.xml");  
            new SchemaExport(cfg).Execute(true, true, false);  
            using (ISessionFactory sessionFactory = cfg.BuildSessionFactory()) { }  
        }  
  
        private ISessionFactory _sessionFactory;  
  
        [SetUp]//定义测试函数初始化函数,每个测试函数运行前都会被调用一次。  
        public void InitSessionFactory()  
        {  
            var cfg = new NHibernate.Cfg.Configuration().Configure(System.AppDomain.CurrentDomain.BaseDirectory + "\\hibernate.cfg.xml");  
            _sessionFactory = cfg.BuildSessionFactory();  
        }  
  
        [Test]  
        public void SaveTest()  
        {  
            var stu = new Domain.Student()  
            {  
                Name = "张三",  
                Sex = "M",  
                Age = 20  
            };  
            using (ISession session = _sessionFactory.OpenSession())  
            {  
                try  
                {  
                    object obj = session.Save(stu);  
                    session.Flush();  
                    Assert.NotNull(obj);  
                }  
                catch (Exception ex)  
                {  
                    throw ex;  
                }  
            }  
        }  
  
        [Test]  
        public void SelectTest()  
        {  
            using (ISession session = _sessionFactory.OpenSession())  
            {  
                Domain.Student stu = session.Get<Domain.Student>(1);  
                Assert.NotNull(stu);  
                Console.WriteLine(stu.Name);  
            }  
        }  
    }  
}  
View Code

 

 测试结果如下图所示:

 

gxlsystem.com,布布扣

OK了,到此为止,算是把NHibernate+NUnit 的demo完整演示一遍了,不知道各位小伙伴们看懂了没?末尾了,免不得再唠叨一句:珍爱生命,远离IT。。。。

注:关于使用NUnit 测试和 MS 测试框架之间的区别,大家可以去看我转载的一篇文章:Nunit Test 和 MS Test 的区别

NHibernate+NUnit (VS2012+SQL Server2008) (转),布布扣,bubuko.com

热门排行

今日推荐

热门手游