NHibernateUtil- Dao- Test

來源:互聯網
上載者:User

//============================================================
// Auto generated by CodeSmith, at:  2012/9/5 21:57:44
//============================================================

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using log4net;
using NHibernate.Context;

namespace BMW.Core.Dao {
    public class NHibernateUtil {
        /// <summary>
        /// 全域唯一的SessionFactory
        /// </summary>
        public static readonly ISessionFactory SessionFactory;
       

        //靜態塊,初始化讀取 Hibernate 配置
        static NHibernateUtil() {
            try {
                Configuration cfg = new Configuration();
                SessionFactory = cfg.Configure().BuildSessionFactory();
            }
            catch (Exception ex) {
                ILog logger = LogManager.GetLogger("NHibernateHelper Logger");
                if (logger.IsErrorEnabled)
                    logger.Error("NHibernate initialization failed.Exception:{0}",ex);
                throw;
            }
        }

        /// <summary>
        /// 綁定Session上下文管理,與current_session_context_class配置節相關,應在請求開始時執行
        /// </summary>
        public static void BindSession() {
            ISession session = SessionFactory.OpenSession(); ;
            CurrentSessionContext.Bind(session);
        }

        /// <summary>
        /// 解除Session上下文管理綁定,釋放Session對象。與current_session_context_class配置節相關,應在請求結束時執行。
        /// </summary>
        public static void UnbindSession() {
            ISession session = CurrentSessionContext.Unbind(NHibernateUtil.SessionFactory);
            session.Dispose();
        }

        /// <summary>
        /// 擷取當前內容相關的Session
        /// </summary>
        public static ISession CurrentSession {
            get {
                return SessionFactory.GetCurrentSession();
            }
        }

        /// <summary>
        /// 在當前會話中開始事務Hibernate並返回事務對象,應用using釋放
        /// </summary>
        public static ITransaction BeginTransaction() {
            return CurrentSession.BeginTransaction();
        }
    }
}

 

 

 

//============================================================
// Auto generated by CodeSmith, at:  2012/9/5 21:57:44
//============================================================

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using System.Web;
using NHibernate.Context;
using log4net;

namespace BMW.Core.Dao {
    public class NHibernateDao<T, TKey> {

        public ISession Session {
            get {
                return NHibernateUtil.CurrentSession;
            }
        }

        public T Insert(T entity) {
            Session.Save(entity);
            return entity;
        }

        public T Update(T entity) {
            Session.Merge(entity);
            return entity;
        }

        public void Delete(T entity) {
            Session.Delete(entity);
        }

        public T FetchByKey(TKey key) {
            return Session.Get<T>(key);
        }

        public IList<T> GetAll() {
            return Session.CreateCriteria(typeof(T)).List<T>();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using BMW.Core.Dao;
using System.Transactions;

namespace BMW.Core.Test {

    [TestFixture]
    public class TestBase {
        [TestFixtureSetUp]
        public void TestFixtureSetUp() {
            NHibernateUtil.BindSession();
        }

        [TestFixtureTearDown]
        public void TestFixtureTearDown() {
            NHibernateUtil.UnbindSession();
        }

        //TransactionScope tx = null;

        //[SetUp]
        //public void SetUp() {
        //    tx = new TransactionScope();
        //}

        //[TearDown]
        //public void TearDown() {
        //    tx.Dispose();
        //}
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using BMW.Core.Biz;
using BMW.Core.Model;

namespace BMW.Core.Test
{
    [TestFixture]
    public class PositionBizTest:TestBase
    {
        private PositionBiz target = new PositionBiz();

        [TestCase]
        public void GetAllTest() {
            Assert.AreEqual(5, target.GetAll().Count);
        }

        [TestCase]
        public void FetchPositionByNameTest()
        {
            Assert.AreEqual(1, target.FetchPositionsByName("員工").Id);
        }

        [TestCase]
        public void FetchByKeyTest() {
            Assert.IsNotNull(target.FetchByKey(2));
        }

        [TestCase]
        public void AddTest() {
            Position p = new Position { Name = "員工" };
            //輸入重複職位名字,應拋出異常
            Assert.Throws<BusinessException>(() => target.Add(p));
            //不存在則添加
            p = new Position { Name = "所長" };
            target.Add(p);
            Assert.AreEqual(6,target.GetAll().Count);
        }

        //產看當前職位ID是被外鍵使用,true為使用中,false未使用
        [TestCase]
        public void CheckPositionIsReferencedTest() {
            Assert.IsTrue(target.CheckPositionIsReferenced(1));
            Assert.IsFalse(target.CheckPositionIsReferenced(2));
        }

        [TestCase]
        public void UpdateTest() {
            //修改職位名稱,如果修改的名稱在表裡面已經存在,則拋出異常
            Position p = target.FetchByKey(4);
            p.Name = "經理";
            Assert.Throws<BusinessException>(() => target.Update(p));
            //如果是唯一,則成功
            p.Name = "班長";
            target.Update(p);
            Assert.AreEqual("班長", target.FetchByKey(4).Name);
        }

        [TestCase]
        public void CheckPositionIsUsedTest() {
            //如果職位被應用,返回true
            Position p = new Position { Id = 1 };
            Assert.IsTrue(target.CheckPositionIsUsed(p.Id));
            p.Id = 2;
            Assert.IsFalse(target.CheckPositionIsUsed(p.Id));
        }

        [TestCase]
        public void DeleteByIdTest() {
            //如果職位在員工表中有應用則拋出異常
            Position p = target.FetchByKey(1);
            Assert.Throws<BusinessException>(() => target.DeleteById(p.Id));
            //刪除成功之後,資料不存在返回null
            target.DeleteById(3);
            Assert.IsNull(target.FetchByKey(3));
        }
    }
}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.