如何用Nunit测试Nhibernate?

时间:2009-11-05 04:08:16

标签: c# unit-testing nhibernate nunit

对不起转贴。

我正在使用Nhibernate进行ORM并拥有这个类我需要使用Nunit执行单元测试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using NutritionLibrary.Entity;
using System.Data;
using System.Data.SqlClient;
using System.Collections;

namespace NutritionLibrary.DAO
{
    public class IngredientDAONHibernate : NutritionLibrary.DAO.IngredientDAO

    {

          private Configuration config;
        private ISessionFactory factory;

        public IngredientDAONHibernate()
        {

                config = new Configuration();
                config.AddClass(typeof(NutritionLibrary.Entity.Ingredient));
                config.AddClass(typeof(Entity.Nutrient));
                config.AddClass(typeof(Entity.NutrientIngredient));
                       factory = config.BuildSessionFactory();

        }


        /// <summary>
        ///  gets the list of ingredients from the db
        /// </summary>
        /// <returns>IList of ingredients</returns>
        public System.Collections.Generic.IList<Ingredient> GetIngredientList()
        {
            System.Collections.Generic.IList<Ingredient> ingredients;
            string hql = "from NutritionLibrary.Entity.Ingredient ingredient";

            ISession session = null;
            ITransaction tx = null;

            try
            {
                session = factory.OpenSession();
                tx = session.BeginTransaction();

                IQuery q = session.CreateQuery(hql);

                ingredients = q.List<Ingredient>();
                tx.Commit();
            }
            catch (Exception e)
            {
                if (tx != null) tx.Rollback();
                /*if (logger.IsErrorEnabled)
                {
                    logger.Error("EXCEPTION OCCURRED", e);
                }*/

             ingredients = null;
            }
            finally
            {
                session.Close();
                session = null;
                tx = null;
            }

            return ingredients;
        }


    }
}

我从构造函数开始,但是有几个人告诉我它不是真的有必要。所以这是我需要测试的方法。它查询数据库并给我一个成分对象列表。我很难开始学习如何测试getIngredientList()方法。我有这个测试存根:

[TestMethod()]
        public void GetIngredientListTest()
        {
            IngredientDAONHibernate target = new IngredientDAONHibernate(); // TODO: Initialize to an appropriate value
            IList<Ingredient> expected = null; // TODO: Initialize to an appropriate value
            IList<Ingredient> actual;
            actual = target.GetIngredientList();
            Assert.AreEqual(expected, actual);

        }

我还有许多其他类似的方法需要测试,所以如果有人能够帮助我开始使用它,我将基本了解如何在其他方法上实现单元测试。< / p>

再次感谢您的时间和建议。

1 个答案:

答案 0 :(得分:3)

我没有尝试自己解释,我可以给你的最好的建议是学习和使用S#arp architecture,它可以帮助你设置nUnit测试,DAO和DAL层等等。它还强制使用NHibernates Best Practices等。您可以在Bill McCafferty's blog(也是维护S#arp库的人)上阅读有关S#arp体系结构以及如何设置和运行nUnit测试等的更多信息。

注意:为了快速入门,S#arp libs附带了大量示例来向您展示它是如何完成的。如果S#arp看起来太多了,你可以按照上面NH最佳实践的链接,它有一些关于如何以统一和通用的方式设置nUnit测试的说明。