In-Memory Database (SQLite) ব্যবহার করে Unit Test লেখা

NHibernate এবং Unit Testing Techniques - এন হাইবারনেট (NHibernate) - Microsoft Technologies

297

Unit testing হল একটি গুরুত্বপূর্ণ টেস্টিং কৌশল, যা কোডের বিভিন্ন অংশ বা মডিউল স্বাধীনভাবে পরীক্ষা করতে সাহায্য করে। In-memory databases যেমন SQLite ব্যবহার করে ইউনিট টেস্টিং করার মাধ্যমে আপনি ডেটাবেস ইন্টারঅ্যাকশনকে দ্রুত এবং আরও কার্যকরভাবে পরীক্ষা করতে পারেন, কারণ এখানে ফাইল সিস্টেমে কোনো ডেটাবেস ফাইল তৈরি হয় না এবং টেস্টের শেষে ডেটাবেসের ডেটা মুছে যায়।

SQLite একটি লাইটওয়েট relational database management system (RDBMS), যা in-memory মোডে চালানো যেতে পারে। এই মোডে ডেটাবেসটি মেমরি (RAM) তে তৈরি হয় এবং টেস্ট সম্পন্ন হওয়ার পর তা মুছে যায়। NHibernate বা অন্য ORM টুলগুলির সাথে এই ধরনের ডাটাবেস ব্যবহার করলে, আপনি অল্প সময়ে টেস্টগুলো রান করতে পারেন এবং ডেটাবেস রিলেটেড টেস্টিং আরও সঠিকভাবে সম্পন্ন করতে পারেন।

In-Memory SQLite ব্যবহার করে Unit Test লেখার প্রক্রিয়া

এখানে, আমরা NHibernate ব্যবহার করে SQLite In-Memory Database ব্যবহার করে Unit Test লিখার উদাহরণ দেখব।


1. SQLite In-Memory Database কনফিগার করা

প্রথমে, আপনাকে SQLite এর জন্য NHibernate কনফিগারেশন সেট আপ করতে হবে। SQLite ইন-মেমরি ডেটাবেসের জন্য কনফিগারেশন করতে, hibernate.cfg.xml ফাইলটি বা কনফিগারেশন কোডে কিছু পরিবর্তন করতে হবে।

NHibernate Configuration কোড

var cfg = new Configuration();
cfg.Configure(); // Hibernate.cfg.xml কনফিগারেশন লোড করা
cfg.SetProperty("hibernate.dialect", "NHibernate.Dialect.SQLiteDialect");
cfg.SetProperty("hibernate.connection.driver_class", "NHibernate.Driver.SQLite20Driver");
cfg.SetProperty("hibernate.connection.provider", "NHibernate.Cfg.Environment.ConnectionProvider");
cfg.SetProperty("hibernate.connection.connection_string", "Data Source=:memory:;Version=3;New=True;");
cfg.SetProperty("hibernate.hbm2ddl.auto", "update"); // Schema আপডেট করার জন্য

var sessionFactory = cfg.BuildSessionFactory();

এখানে:

  • hibernate.connection.connection_string প্রপার্টি 'Data Source=:memory:' দ্বারা SQLite ইন-মেমরি ডেটাবেস কনফিগার করা হয়েছে।
  • hibernate.hbm2ddl.auto প্রপার্টি 'update' দিলে NHibernate স্বয়ংক্রিয়ভাবে ডেটাবেসের স্কিমা আপডেট করবে।

2. Unit Test Framework কনফিগারেশন

Unit Testing এর জন্য আমরা সাধারণত xUnit, NUnit বা MSTest ব্যবহার করতে পারি। এখানে xUnit ব্যবহার করে Unit Test কনফিগার করব।

xUnit Test Class

public class EmployeeTests : IDisposable
{
    private readonly ISessionFactory sessionFactory;
    private ISession session;
    private ITransaction transaction;

    public EmployeeTests()
    {
        // NHibernate Configuration
        var cfg = new Configuration();
        cfg.Configure(); // Hibernate.cfg.xml ফাইলের কনফিগারেশন লোড
        cfg.SetProperty("hibernate.dialect", "NHibernate.Dialect.SQLiteDialect");
        cfg.SetProperty("hibernate.connection.driver_class", "NHibernate.Driver.SQLite20Driver");
        cfg.SetProperty("hibernate.connection.connection_string", "Data Source=:memory:;Version=3;New=True;");
        cfg.SetProperty("hibernate.hbm2ddl.auto", "update");

        // SessionFactory তৈরি করা
        sessionFactory = cfg.BuildSessionFactory();

        // সেশন শুরু করা
        session = sessionFactory.OpenSession();
        transaction = session.BeginTransaction();

        // ডেটাবেস স্কিমা আপডেট করা
        var employeeMapping = new EmployeeMapping();
        new SchemaExport(cfg).Create(true, true);
    }

    [Fact]
    public void Should_Insert_Employee()
    {
        var employee = new Employee { Name = "John Doe", Position = "Developer", HireDate = DateTime.Now };

        // ডেটাবেসে ইনসার্ট করা
        session.Save(employee);

        // কমিট করা
        transaction.Commit();

        // পুনরায় সেশন থেকে রিটার্ন করা
        var fetchedEmployee = session.Get<Employee>(employee.Id);

        // Assertion
        Assert.NotNull(fetchedEmployee);
        Assert.Equal(employee.Name, fetchedEmployee.Name);
    }

    public void Dispose()
    {
        // টেস্টের পর ট্রানজেকশন বন্ধ করা এবং সেশন নিষ্ক্রিয় করা
        transaction?.Dispose();
        session?.Dispose();
        sessionFactory?.Dispose();
    }
}

এখানে:

  • EmployeeTests ক্লাসটি xUnit টেস্ট ক্লাস হিসেবে তৈরি করা হয়েছে, এবং এতে IDisposable ইন্টারফেস ব্যবহার করা হয়েছে সেশন এবং ট্রানজেকশন পরিষ্কার করার জন্য।
  • Should_Insert_Employee টেস্ট মেথডে একটি Employee অবজেক্ট তৈরি করা হয়েছে এবং সেটা ডেটাবেসে ইনসার্ট করা হয়েছে।
  • SchemaExport ক্লাস ব্যবহার করে ইন-মেমরি ডেটাবেসে স্কিমা তৈরি করা হয়েছে।

3. Employee Entity এবং Mapping ফাইল তৈরি করা

আপনার Employee ক্লাস এবং এর ম্যাপিং (NHibernate Mapping) তৈরি করতে হবে।

Employee Entity Class

public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Position { get; set; }
    public virtual DateTime HireDate { get; set; }
}

Employee Mapping Class

public class EmployeeMapping : ClassMapping<Employee>
{
    public EmployeeMapping()
    {
        Table("Employees");

        Id(x => x.Id, m => m.Generator(Generators.Identity));
        Property(x => x.Name);
        Property(x => x.Position);
        Property(x => x.HireDate);
    }
}

এখানে:

  • Employee ক্লাসের মধ্যে প্রয়োজনীয় প্রপার্টি ডিফাইন করা হয়েছে।
  • EmployeeMapping ক্লাসটি NHibernate ম্যাপিং কনফিগারেশন হিসেবে ব্যবহৃত হচ্ছে।

4. Unit Test এর Execution এবং পারফরম্যান্স বিশ্লেষণ

এখন, আপনি Unit Test চালিয়ে দেখতে পারেন যে ইন-মেমরি SQLite ডেটাবেসে Employee সঠিকভাবে ইনসার্ট এবং ফেচ হচ্ছে কিনা। SQLite ইন-মেমরি ডেটাবেসের সাহায্যে আপনার টেস্ট রান হবে দ্রুত, এবং প্রতিবার টেস্ট চলাকালীন নতুন ডেটাবেস তৈরি হবে, যা একটি পরিষ্কার পরিবেশ নিশ্চিত করবে।


উপসংহার

SQLite ইন-মেমরি ডেটাবেস ব্যবহার করে NHibernate এর সাথে Unit Testing করা খুবই কার্যকরী এবং দ্রুত। আপনি একাধিক টেস্ট ক্যাস তৈরি করতে পারেন এবং কোনও স্থায়ী ডেটাবেসের প্রয়োজন ছাড়াই ডেটাবেস ইন্টারঅ্যাকশন পরীক্ষা করতে পারেন। In-memory ডেটাবেস ব্যবহারের মাধ্যমে টেস্টিং আরও পরিষ্কার এবং দক্ষ হয়, কারণ এটি সমস্ত ডেটাবেস অপারেশন মেমরিতে পরিচালনা করে।

Content added By
Promotion

Are you sure to start over?

Loading...