یکی از روشهای رایج در Unit Test کدهای مربوط به دیتابیس این است که یک دیتابیس داخل حافظهای ساخته شده و همه تستها روی آن انجام شود. در پروژههای NHibernate این کار معمولا طی مراحل زیر انجام میشود:
۱- انجام تنظیمات دیتابیس Sqlite به صورت داخل حافظهای
۲- ایجاد خودکار دیتابیس از روی mappingها در مرحله Setup تست واحد
۳- ایجاد/تزریق دادههای امتحانی مورد نیاز در ادامه مرحله قبل
۴- انجام unit test مورد نظر
در پروژههای قبلی، مرحله ایجاد دیتابیس و تنظیمات session را به طور کاملا دستی انجام میدادیم اما از وقتی که از Sharp Arch. استفاده میکنیم میتوان از روشهای سادهتری استفاده کرد. مراحل انجام کار:
۱- ایجاد ارجاع به SharpArch.Tests
۲- ارث بری همه testها از RepositoryTestsBase
۳- initialization اولیه Service Locator در Setup تست
۴- انجام تستهای مورد نظر
یک نمونه تست را در ادامه میبینیم:
using ProjectName.Domain;
using ProjectName.Domain.Contracts.Tasks;
using ProjectName.Infrastructure.Repositories;
using ProjectName.Tasks;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using CommonServiceLocator.WindsorAdapter;
using Microsoft.Practices.ServiceLocation;
using NUnit.Framework;
using SharpArch.Domain.PersistenceSupport;
using SharpArch.NHibernate;
using SharpArch.Testing.NUnit.NHibernate;
namespace ProjectName.Tests
{
[TestFixture]
public class SimpleEntityTaskTest : RepositoryTestsBase
{
private readonly ISimpleEntityTask _simpleEntityTask;
public SimpleEntityTaskTest(ISimpleEntityTask simpleEntityTask)
{
_simpleEntityTask = simpleEntityTask;
}
[SetUp]
protected override void SetUp()
{
ServiceLocatorInitializer.Init();
base.SetUp();
}
protected override void LoadTestData()
{
//load test data
}
[Test]
public void FindAll()
{
Assert.AreEqual(0, _simpleEntityTask.FindAll().Count);
}
}
}