1. ????????
  1?????????????(Unit Test)??
  
  ????????????????????????????е????????????????????????У???????????????????????????????????????????в????????????????л?????????????????????е????????????????????????????????????????????е?????У????????????????????????????????????????????????????????в????????????????????????????????д????????????????????????????????????
  
   2??????????????????(TDD?? Test-Driven Development)??
  
   ??????????????????????????????????????????д?κδ????????????д????????????????????????????д????????????????????????????????????????????????????????У????????????????????в????
  
   ??????????????£?
  
  1. д??????????
  2. ?ó???????????
  3. ???в????????????????С?
  4. ?ò????????????С?
  5. ????????????????????
  
  2. ??????????????
  1?? ????????Bug
  
  ?????????е???????????????????????????????飬?乤???????п??????????????????????????в????飬????????????????????????????????????????????????????????
  
   ???????????????????????????????ò???????????????????????????????????????????????????????????β??????????????????в?????????????????е??????????????????????? - ????????????????????????в??????????????????????????????У?
  
   ??????????????????????????????????д???????в???????????Щ????????????????????????????????????????????????????????????????????У????????????????????????????????????С?
    
  2?? ?????????
  
  ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????ε???·???????? ??????????????????????????????????????????????
  ??????????????????У??????????????????????????????????????????????????????С??????????????????????????Bug????????У??????????????賣?????????????????????????????С?????????????????????佫?????????????Щ??????????????????Bug???棬?????????£???ЩBug?????????????????????????????????????????????????????????????????? ???????????????????????????????????С?
  ??????????????У????????????????????????д?????????????????????????????????????????Щ???????????????Bug??????????????????????????????????????????£??????????????и???Ч??????????????????????????????????????????????μ?????????????????Ч?????á???????????????????????????????????????????ú????????

1. ????????
  1????????????(Unit Test)??
  
  ????????????????????????????е??????????????????????У???????????????????????????????????????????в????????????????л?????????????????????е????????????????????????????????????????????е?????У????????????????????????????????????????????????????????в????????????????????????????????д????????????????????????????????????
  
   2?????????????????(TDD?? Test-Driven Development)??
  
   ??????????????????????????????????????????д?κδ????????????д??????????????????????????д????????????????????????????????????????????????????????У????????????????????в????
  
   ??????????????£?
  
  1. д??????????
  2. ?ó???????????
  3. ???в????????????????С?
  4. ?ò????????????С?
  5. ????????????????????
  
  2. ??????????????
  1?? ????????Bug
  
  ?????????е???????????????????????????????飬?乤???????п??????????????????????????в????飬????????????????????????????????????????????????????????
  
   ???????????????????????????????ò???????????????????????????????????????????????????????????β??????????????????в?????????????????е??????????????????????? - ????????????????????????в??????????????????????????????У?
  
   ??????????????????????????????????д???????в???????????Щ????????????????????????????????????????????????????????????????????У????????????????????????????????????С?
    
  2?? ?????????
  
  ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????ε???·???????? ??????????????????????????????????????????????
  ??????????????????У??????????????????????????????????????????????????????С??????????????????????????Bug????????У??????????????賣?????????????????????????????С?????????????????????佫?????????????Щ??????????????????Bug???棬?????????£???ЩBug?????????????????????????????????????????????????????????????????? ???????????????????????????????????С?
  ??????????????У????????????????????????д?????????????????????????????????????????Щ???????????????Bug??????????????????????????????????????????£??????????????и???Ч??????????????????????????????????????????????μ?????????????????Ч?????á???????????????????????????????????????????ú????????
 ????????????????к??
  
   ????1??????α?д????????????????
  
   ????2??????????д???????????????
  
   ????3???????е?????????????????????????
  
   ????4???????????????????????
  
   ????5??????????????
  
   ?????????????????·??????????????????????????????????????????????????????????????????????????????????????????? 100 ?? 1000 ????????????????????????????????1?????????????????????????汾??????????
  
   ????????????????????д????????????е????????????ò?????????????????д?????д????????е?????????????????????????????????????
  
  ????????????????????????????????????????????η??????Bug????????????????????????????????????Σ?Bug????????????????????????????????????????????á??????????????????????????????????????????????о??????????????в?????Ч????????????????? ??????????????????????£?????????????????????????????????????????????????????ú??????????????????????????????Bug??????в?????Ρ?
  
  
  
  3?? ????????????????????????
  
  ????????????????????????????????д??????????????????У??????????????????????????????????????????????????????????????????????????????????????????????в??????????????????????????????????????????????????????????????????????д?????????????????????????к?????????????????????????????????????κ?????????????????д??????????С?????????????????????????????
  
  
  
  4?? ??д????????????????????????????????
  
  ???д????????????????????????????????????????????????????????????????????????????????????????????????Щ?????к????????
  
  
  
  3. ??ν??е??????
  ?????????????????????????????????????????????α?д?????????????????????????????Nunit????VSNunit????????????
  
  ???????????????Users???????????????????е????Users???????????£?
  
  using System;
  
  namespace DB
  
  {
  
   public class users
  
   {
  
   public users()
  
   {
  
  
  
   }
  
  
  
  
  
   private System.String _Password;
  
   public System.String Password
  
   {
get { return _Password; }
  
   set { _Password = value; }
  
   }
  
  
  
   private System.DateTime _LastLogon;
  
   public System.DateTime LastLogon
  
   {
  
   get { return _LastLogon; }
  
   set { _LastLogon = value; }
  
   }
  
  
  
   private System.String _Name;
  
   public System.String Name
  
   {
  
   get { return _Name; }
  
   set { _Name = value; }
  
   }
  
  
  
   private System.String _LogonID;
  
   public System.String LogonID
  
   {
  
   get { return _LogonID; }
  
   set { _LogonID = value; }
  
   }
  
  
  
   private System.String _EmailAddress;
  
   public System.String EmailAddress
  
   {
  
   get { return _EmailAddress; }
  
   set { _EmailAddress = value; }
  
   }
  
   }
  
  }
  
  
  ????????????????EntityControl?????ORM?????????????е?????????????????????????е???????????????????????????????????????????
  
  using System;
  
  using System.Reflection;
  
  using System.Data;
  
  using System.Data.SqlClient;
  
  
  
  
  
  
  
  using NHibernate;
  
  using NHibernate.Type;
  
  using NHibernate.Cfg;
  
  using NHibernate.Dialect;
  
  using NHibernate.Tool.hbm2ddl;
  
  
  
  using System.Collections;
  
  
  
  
  
  namespace DB
  
  {
  
   ///
  
   /// Summary description for UsersControl.
  
   ///
  
   public class EntityControl
  
   {
  
   private static EntityControl entity;
  
  
  
  
  
   private static ISessionFactory sessions;
  
   private static Configuration cfg;
  
   private static Dialect dialect;
  
  
  
   public static EntityControl CreateControl()
  
   {
  
   if (entity == null)
  
   {
  
   BuildSessionFactory();
 if (entity == null)
  
   entity = new EntityControl();
  
   }
  
   return entity;
  
   }
  
   private static void BuildSessionFactory()
  
   {
  
   ExportSchema( new string[] { "users.hbm.xml"
  
   ?? "Department.hbm.xml"
  
   ?? "Employee.hbm.xml"
  
   } ?? false);
  
   }
  
   public void AddEntity(object entity)
  
   {
  
  
  
   ISession s = sessions.OpenSession();
  
   ITransaction t = s.BeginTransaction();
  
   try
  
   {
  
   s.Save(entity);
  
   t.Commit();
  
  
  
   }
  
   catch(Exception e)
  
   {
  
   t.Rollback();
  
   throw e;
  
   }
  
  
  
   finally
  
   {
  
   s.Close();
  
   }
  
  
  
   }
  
  
  
  
  
   public void UpdateEntity(object entity??object key)
  
   {
  
   ISession s = sessions.OpenSession();
  
   ITransaction t = s.BeginTransaction();
  
   try
  
   {
  
   s.Update(entity??key);
  
   t.Commit();
  
   }
  
   catch(Exception e)
  
   {
  
   t.Rollback();
  
   throw e;
  
   }
  
   finally
  
   {
  
   s.Close();
  
   }
  
  
  
   }
  
  
  
   public void DeleteEntity(object entity)
  
   {
  
   ISession s = sessions.OpenSession();
  
   ITransaction t = s.BeginTransaction();
  
   try
  
   {
  
   s.Delete(entity);
  
   t.Commit();
  
   }
  
   catch(Exception e)
  
   {
  
   t.Rollback();
  
   throw e;
  
   }
  
   finally
  
   {
  
   s.Close();
  
   }
  
   }
  
  
  
   public object GetEntity(System.Type theType?? object id)
 {
  
   object obj;
  
   ISession s = sessions.OpenSession();
  
   ITransaction t = s.BeginTransaction();
  
   obj = s.Load( theType?? id);
  
   t.Commit();
  
   s.Close();
  
   return obj;
  
   }
  
  
  
   public IList GetEntities(string query)
  
   {
  
   IList lst;
  
   ISession s = sessions.OpenSession();
  
   ITransaction t = s.BeginTransaction();
  
   lst = s.Find(query);
  
   t.Commit();
  
   s.Close();
  
   return lst;
  
   }
  
  
  
   public IList GetEntities(string query?? object value?? IType type)
  
   {
  
   IList lst;
  
   ISession s = sessions.OpenSession();
  
   ITransaction t = s.BeginTransaction();
  
   lst = s.Find(query??value??type);
  
   t.Commit();
  
   s.Close();
  
   return lst;
  
   }
  
  
  
   #region "Schema deal"
  
  
  
  
  
   private static void ExportSchema(string[] files)
  
   {
  
   ExportSchema(files?? true);
  
   }
  
  
  
   private static void ExportSchema(string[] files?? bool exportSchema)
  
   {
  
   cfg = new Configuration();
  
  
  
   for (int i=0; i
  
   {
  
   cfg.AddResource("DB." + files[i]?? Assembly.Load("DB"));
  
   }
  
  
  
   if(exportSchema) new SchemaExport(cfg).Create(true?? true);
  
  
  
   sessions = cfg.BuildSessionFactory( );
  
   dialect = NHibernate.Dialect.Dialect.GetDialect();
  
   }
  
  
  
   ///
  
   /// Drops the schema that was built with the TestCase??s Configuration.
  
   ///
  
   private static void DropSchema()
  
   {
  
   new SchemaExport(cfg).Drop(true?? true);
  
   }
  
  
  
   private static void ExecuteStatement(string sql)
  
   {
  
   ExecuteStatement(sql?? true);
  
   }
 private static void ExecuteStatement(string sql?? bool error)
  
   {
  
   IDbConnection conn = null;
  
   IDbTransaction tran = null;
  
   try
  
   {
  
   if (cfg == null)
  
   cfg = new Configuration();
  
   NHibernate.Connection.IConnectionProvider prov = NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(cfg.Properties);
  
   conn = prov.GetConnection();
  
   tran = conn.BeginTransaction();
  
   IDbCommand comm = conn.CreateCommand();
  
   comm.CommandText = sql;
  
   comm.Transaction = tran;
  
   comm.CommandType = CommandType.Text;
  
   comm.ExecuteNonQuery();
  
   tran.Commit();
  
   }
  
   catch(Exception exc)
  
   {
  
   if (tran != null)
  
   tran.Rollback();
  
   if (error)
  
   throw exc;
  
   }
  
   finally
  
   {
  
   if (conn != null)
  
   conn.Close();
  
   }
  
   }
  
   #endregion
  
   }
  
  }
  
  
  
  
  ??????????????????????????????????п???????
??????????????????????????????ζ?????????д??????????
  
  
  
  ??????????????---UnitTest.cs??????????У???????????????????
  
  using NUnit.Framework;
  
  ???????????????????Attribute?TestFixture??Nunit?????????????????????????????????????
  
   [TestFixture]
  
   public class UnitTest
  
  
  
  ????????????????????
  
   private EntityControl control;
  
   [SetUp]
  
   public void SetUp()
  
   {
  
   control = EntityControl.CreateControl();
  
   }
  
   [Setup]??????????????????????Щ?????????????????????????У????????????????????????????????????е?Constructor.
  
  ??????????????β?????????????????
  
   [Test]
  
   public void AddTest()
  
   {
  
   users user = new users();
  
   user.LogonID = "1216";
  
   user.Name = "xian city1";
  
   user.EmailAddress = "tim.wang@grapecity.com1";
control.AddEntity(user);
  
  
  
   users u2 =(users) control.GetEntity(typeof(users)??user.LogonID);
  
   Assert.IsTrue(
  
   u2.Name.Equals("xian city1") &&
  
   u2.EmailAddress.Equals("tim.wang@grapecity.com1")
  
   );
  
   Assert.IsFalse(
  
   u2.Name.Equals("xian city") &&
  
   u2.EmailAddress.Equals("tim.wang@grapecity.com")
  
   );
  
   }
  
  
   ??????????????У?????????????????????????AddEntity??????????????У??????????????????????е????????????????????GetEntity??????????????????????????????????????????????б?????ж??????????????????????????????????β??????????????????????????????????????????????????????????á?
  
  ???????????????????????
  
   [Test]
  
   [Ignore("Finished Test")]
  
   public void UpdateTest()
  
   {
  
   users u1 =(users) control.GetEntity(typeof(users)??"112");
  
   Assert.IsTrue(
  
   u1.Password == "123" &&
  
   u1.EmailAddress == "234"
  
   );
  
   u1.Password = "aaa";
  
   u1.EmailAddress = "tim";
  
   control.UpdateEntity(u1??"112");
  
   Assert.IsFalse(
  
   u1.Password == "123" ||
  
   u1.EmailAddress == "234"
  
   );
  
   Assert.IsTrue(
  
   u1.Password == "aaa" &&
  
   u1.EmailAddress == "tim"
  
   );
  
   }
  
  
   ????????????????????????д???????????????????????Ч???
  
  
  
   ?????????????????????????????????д?????????????????????????????????????????????????????????????????????????????????????????????????????д?????????????????????????????????????????顣
  
  ???????Щ?????????е??????????д??????????????????????????????????????д