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

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework) Entity Framework এবং Unit Testing |
223
223

In-Memory Database হল একটি তাত্ক্ষণিক ডেটাবেস যা শুধুমাত্র মেমরিতে র‍্যাম (RAM) এ চলে। এটি ডেটাবেসের একটি ভার্চুয়াল কপি তৈরি করে, যা মূল ডেটাবেসের সাথে সরাসরি কোনো সংযোগ স্থাপন না করেই টেস্ট করতে সাহায্য করে। EF Core-এ In-Memory Database ব্যবহারের ফলে Unit Testing করা অনেক সহজ হয়, কারণ আপনি কোনো বাস্তব ডেটাবেসের পরিবর্তে মেমরির মধ্যে ডেটা নিয়ে কাজ করতে পারেন। এতে করে টেস্ট দ্রুত হয় এবং ডেটাবেসের কোনো প্রকৃত পরিবর্তন ঘটে না।


In-Memory Database ব্যবহার করে Unit Testing করার সুবিধা

  1. ফাস্ট এবং আইসোলেটেড টেস্টিং: ইন-মেমরি ডেটাবেসের মাধ্যমে টেস্ট দ্রুত রান হয়, কারণ এখানে কোনো রিয়েল ডেটাবেসের IO অপারেশন থাকে না।
  2. ডেটাবেসের উপর নির্ভরশীলতা কমানো: ডেটাবেসের পরিবর্তে মেমরি ব্যবহার করার ফলে প্রকৃত ডেটাবেসের সাথে কোনো ইন্টারঅ্যাকশন ছাড়াই টেস্ট করা সম্ভব।
  3. নির্ভরশীলতার হ্রাস: ইন-মেমরি ডেটাবেস ব্যবহার করলে, টেস্ট রানিংয়ের সময় কোনো প্রকৃত ডেটাবেসের প্রভাব বা পরিসরের সীমাবদ্ধতা থাকে না।

In-Memory Database সেটআপ করা

In-Memory ডেটাবেস ব্যবহারের জন্য, আপনাকে প্রথমে Microsoft.EntityFrameworkCore.InMemory প্যাকেজটি ইনস্টল করতে হবে। এর মাধ্যমে EF Core ইন-মেমরি ডেটাবেসে কাজ করতে সক্ষম হবে।

NuGet প্যাকেজ ইনস্টল:

dotnet add package Microsoft.EntityFrameworkCore.InMemory

উদাহরণ: In-Memory Database ব্যবহার করে Unit Test লেখা

ধরা যাক, আপনার একটি Student টেবিলের জন্য StudentService ক্লাস আছে, যেখানে AddStudent এবং GetAllStudents মেথড থাকে।

1. Student মডেল:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

2. ApplicationDbContext ক্লাস:

public class ApplicationDbContext : DbContext
{
    public DbSet<Student> Students { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
}

3. StudentService ক্লাস:

public class StudentService
{
    private readonly ApplicationDbContext _context;

    public StudentService(ApplicationDbContext context)
    {
        _context = context;
    }

    public List<Student> GetAllStudents()
    {
        return _context.Students.ToList();
    }

    public void AddStudent(Student student)
    {
        _context.Students.Add(student);
        _context.SaveChanges();
    }
}

4. Unit Test Class (In-Memory Database ব্যবহার করে):

এখন, In-Memory Database ব্যবহার করে এই StudentService ক্লাসের টেস্ট করতে হবে।

using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using Xunit;

public class StudentServiceTests
{
    private DbContextOptions<ApplicationDbContext> _options;

    public StudentServiceTests()
    {
        // In-Memory Database Setup
        _options = new DbContextOptionsBuilder<ApplicationDbContext>()
            .UseInMemoryDatabase(databaseName: "TestStudentDatabase")
            .Options;
    }

    [Fact]
    public void AddStudent_ShouldAddStudentToDatabase()
    {
        // Arrange: Set up DbContext with In-Memory Database
        var context = new ApplicationDbContext(_options);
        var service = new StudentService(context);
        var student = new Student { Name = "John Doe", Age = 25 };

        // Act: Add student to the in-memory database
        service.AddStudent(student);

        // Assert: Verify that the student was added to the database
        var addedStudent = context.Students.First();
        Assert.Equal("John Doe", addedStudent.Name);
        Assert.Equal(25, addedStudent.Age);
    }

    [Fact]
    public void GetAllStudents_ShouldReturnAllStudents()
    {
        // Arrange: Set up DbContext and add a student
        var context = new ApplicationDbContext(_options);
        context.Students.Add(new Student { Name = "Jane Smith", Age = 22 });
        context.SaveChanges();

        var service = new StudentService(context);

        // Act: Get all students from the database
        var students = service.GetAllStudents();

        // Assert: Verify the returned students
        Assert.Single(students);
        Assert.Equal("Jane Smith", students.First().Name);
        Assert.Equal(22, students.First().Age);
    }
}

ব্যাখ্যা

  1. DbContext Setup: আমরা ইন-মেমরি ডেটাবেস সেটআপ করেছি UseInMemoryDatabase পদ্ধতি ব্যবহার করে, যা মেমরিতে ডেটাবেস তৈরি করে। এখানে "TestStudentDatabase" নামের একটি ইন-মেমরি ডেটাবেস তৈরি করা হয়েছে, যা টেস্ট চলাকালীন ব্যবহার হবে।
  2. AddStudent টেস্ট: AddStudent মেথডের জন্য, আমরা একটি Student অবজেক্ট তৈরি করেছি এবং AddStudent মেথডটি কল করে ইন-মেমরি ডেটাবেসে সেই ছাত্রকে যুক্ত করেছি। পরে Assert ব্যবহার করে নিশ্চিত করেছি যে ডেটাবেসে ছাত্রটি সঠিকভাবে সংরক্ষিত হয়েছে।
  3. GetAllStudents টেস্ট: এখানে আমরা একটি ছাত্র যুক্ত করেছি এবং পরে GetAllStudents মেথড কল করে ডেটাবেসের সব ছাত্র পেয়েছি। Assert দিয়ে চেক করেছি যে, আমরা যে ছাত্রটি যুক্ত করেছি, তা সঠিকভাবে রিটার্ন হয়েছে।

উপসংহার

In-Memory Database ব্যবহার করে আপনি Entity Framework এর কোড টেস্ট করতে পারেন ডেটাবেসের কোনো পরিবর্তন ছাড়াই। এতে কোডের লজিক এবং ফাংশনালিটি যাচাই করা সহজ হয়ে যায় এবং ডেটাবেসের প্রতি নির্ভরশীলতা কমে যায়। এটি বিশেষত দ্রুত এবং কার্যকরী Unit Testing এর জন্য উপযুক্ত।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion