In-Memory Database হল একটি তাত্ক্ষণিক ডেটাবেস যা শুধুমাত্র মেমরিতে র্যাম (RAM) এ চলে। এটি ডেটাবেসের একটি ভার্চুয়াল কপি তৈরি করে, যা মূল ডেটাবেসের সাথে সরাসরি কোনো সংযোগ স্থাপন না করেই টেস্ট করতে সাহায্য করে। EF Core-এ In-Memory Database ব্যবহারের ফলে Unit Testing করা অনেক সহজ হয়, কারণ আপনি কোনো বাস্তব ডেটাবেসের পরিবর্তে মেমরির মধ্যে ডেটা নিয়ে কাজ করতে পারেন। এতে করে টেস্ট দ্রুত হয় এবং ডেটাবেসের কোনো প্রকৃত পরিবর্তন ঘটে না।
In-Memory ডেটাবেস ব্যবহারের জন্য, আপনাকে প্রথমে Microsoft.EntityFrameworkCore.InMemory
প্যাকেজটি ইনস্টল করতে হবে। এর মাধ্যমে EF Core ইন-মেমরি ডেটাবেসে কাজ করতে সক্ষম হবে।
dotnet add package Microsoft.EntityFrameworkCore.InMemory
ধরা যাক, আপনার একটি Student
টেবিলের জন্য StudentService
ক্লাস আছে, যেখানে AddStudent
এবং GetAllStudents
মেথড থাকে।
Student
মডেল:public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
ApplicationDbContext
ক্লাস:public class ApplicationDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
}
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();
}
}
এখন, 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);
}
}
UseInMemoryDatabase
পদ্ধতি ব্যবহার করে, যা মেমরিতে ডেটাবেস তৈরি করে। এখানে "TestStudentDatabase"
নামের একটি ইন-মেমরি ডেটাবেস তৈরি করা হয়েছে, যা টেস্ট চলাকালীন ব্যবহার হবে।AddStudent
মেথডের জন্য, আমরা একটি Student
অবজেক্ট তৈরি করেছি এবং AddStudent
মেথডটি কল করে ইন-মেমরি ডেটাবেসে সেই ছাত্রকে যুক্ত করেছি। পরে Assert
ব্যবহার করে নিশ্চিত করেছি যে ডেটাবেসে ছাত্রটি সঠিকভাবে সংরক্ষিত হয়েছে।GetAllStudents
মেথড কল করে ডেটাবেসের সব ছাত্র পেয়েছি। Assert
দিয়ে চেক করেছি যে, আমরা যে ছাত্রটি যুক্ত করেছি, তা সঠিকভাবে রিটার্ন হয়েছে।In-Memory Database ব্যবহার করে আপনি Entity Framework এর কোড টেস্ট করতে পারেন ডেটাবেসের কোনো পরিবর্তন ছাড়াই। এতে কোডের লজিক এবং ফাংশনালিটি যাচাই করা সহজ হয়ে যায় এবং ডেটাবেসের প্রতি নির্ভরশীলতা কমে যায়। এটি বিশেষত দ্রুত এবং কার্যকরী Unit Testing এর জন্য উপযুক্ত।
common.read_more