‫‫‫Database Unit Testing در Sharp Arch.‎

یکی از روش‌های رایج در 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);
}
}
}