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
这两个博客里有些内容重叠了,但我还是建议大家都从头到尾好好读一下,毕竟我们是小白嘛,
2,把自带的Class1.cs删掉,新建一个Student类。代码如下:
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,如图:
此时,目录结构是这样的:
4,编写Student.hbm.xml 映射文件,代码如下:
6,在项目解决方案上右击,选择添加新建项目,添加一个新的类库,取名为:NHibernateTest。(其实,这就是我们利用UNit 进行单元测试的地方)如图:
将新建类库中默认的Class1.cs删掉,此时,目录结构是这样的:
7,在NHibernateTest 项目中,添加对我们刚才新建的Domain类库的引用,以及添加我们下载的NHibernate和NUnit 程序集的引用。如图:
引用添加完毕后,就是下面这个样子的,
10,把下载的NHibernate 中Configuration_Templates文件夹下的MSSQL.cfg.xml文件复制粘贴到NHibernateTest 类库中,并重命名为:hibernate.cfg.xml 并修改文件如下:
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程序),效果如下图所示:
14,点击一下”全部保存“,然后在整个的项目解决方案上右键,选择”生成解决方案“。然后,将NHibernateTest
类库右键,设为启动项目。F5,运行程序
此时,我们看到NUnit.exe已经启动了,在NUnit窗口中,选择:"File"->”new project“,文件名为:NHibernateTest.nunit,点击保存。此时,窗口依然什么都没有。再选择:"Project"->"Add assembly",在弹出的对话框中,找到我们的NHibernateTest类库生成的dll文件,点击打开,如下图:
15,单击NUnit窗口中的Run按钮,此时,NUnit 会自动执行我们的NHibernateTest 类库中的方法。这时,窗口应该是下面这样的:
16,此时,打开数据库,会发现,我们的T_Student数据表已经被自动创建好了。
小伙伴们,你们有没有被惊呆呢?是不是很神奇的东东?哈哈……我发现写文章真是个体力活,受不了了……
唉,没办法,本着对广大的小伙伴尽职尽责的高度使命感,小白我决定继续码字……(鼓掌)
这样测试的话,每次我们都还要启动外部程序NUnit,相信有的小伙伴不乐意了,放心好了,我们可以通过安装插件的方式,解决这个问题(注意:此过程需联网)。
在 VS2012 中,选择:”工具“=》”扩展和更新“,在弹出的对话框中,单击”联机“标签,之后再在搜索框中输入:”NUnit“ ,回车,效果如下图所示:
选择”下载“,下载完毕后,会提示你安装,你直接选择安装就可以了。安装完毕后,重启一下VS。重启之后,选择菜单栏中的:”测试“-》”窗口“-》”测试资源管理器“。然后再重新生成一下整个项目解决方案,这时候,我们在”测试资源管理器“中就可以看到我们的NHibernateTest 测试类了。在这里,我们可以选择全部运行,也可以在单独的方法上右键,选择运行或调试。
下面,我又新写了几个测试方法,分别测试往T_Student表中存入数据,取出数据。NHibernateInit.cs 文件代码如下:
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
测试结果如下图所示:
OK了,到此为止,算是把NHibernate+NUnit 的demo完整演示一遍了,不知道各位小伙伴们看懂了没?末尾了,免不得再唠叨一句:珍爱生命,远离IT。。。。
注:关于使用NUnit 测试和 MS 测试框架之间的区别,大家可以去看我转载的一篇文章:Nunit Test 和 MS Test 的区别
NHibernate+NUnit (VS2012+SQL Server2008) (转),布布扣,bubuko.com