Gson এ Custom Serializer এবং Custom Deserializer এর জন্য Unit Test তৈরি করার জন্য, আমরা সাধারণত JUnit এবং Mockito ফ্রেমওয়ার্ক ব্যবহার করি। এই টেস্টে আমরা Gson এর কাস্টম সিরিয়ালাইজার এবং ডিজিরিয়ালাইজারের কার্যকারিতা যাচাই করব।
এখানে একটি উদাহরণ দেওয়া হবে যেখানে আমরা Person ক্লাসের জন্য Custom Serializer এবং Custom Deserializer তৈরি করব এবং তাদের ইউনিট টেস্ট করব।
Step 1: Custom Serializer এবং Deserializer তৈরি করা
Person Model Class:
public class Person {
private String name;
private int age;
// Constructors, Getters, and Setters
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Custom Serializer:
import com.google.gson.*;
import java.lang.reflect.Type;
public class PersonSerializer implements JsonSerializer<Person> {
@Override
public JsonElement serialize(Person person, Type typeOfSrc, JsonSerializationContext context) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("full_name", person.getName()); // Custom field name
jsonObject.addProperty("age_in_years", person.getAge()); // Custom field name
return jsonObject;
}
}
Custom Deserializer:
import com.google.gson.*;
import java.lang.reflect.Type;
public class PersonDeserializer implements JsonDeserializer<Person> {
@Override
public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
String name = jsonObject.get("full_name").getAsString(); // Custom field name
int age = jsonObject.get("age_in_years").getAsInt(); // Custom field name
return new Person(name, age);
}
}
Step 2: Gson Configuration with Custom Serializer and Deserializer
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GsonConfig {
@Bean
public Gson gson() {
return new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonSerializer()) // Register custom serializer
.registerTypeAdapter(Person.class, new PersonDeserializer()) // Register custom deserializer
.create();
}
}
Step 3: Unit Test for Custom Serializer and Deserializer
আমরা JUnit ব্যবহার করে Gson এর কাস্টম সিরিয়ালাইজার এবং ডিজিরিয়ালাইজারের জন্য ইউনিট টেস্ট লিখব।
JUnit Test:
import com.google.gson.Gson;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class PersonSerializerDeserializerTest {
private Gson gson;
@BeforeEach
public void setUp() {
gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonSerializer()) // Register custom serializer
.registerTypeAdapter(Person.class, new PersonDeserializer()) // Register custom deserializer
.create();
}
@Test
public void testPersonSerialization() {
// Create a Person object
Person person = new Person("John Doe", 30);
// Serialize the Person object to JSON
String json = gson.toJson(person);
// Expected JSON output
String expectedJson = "{\"full_name\":\"John Doe\",\"age_in_years\":30}";
// Assert that the serialized JSON is correct
assertEquals(expectedJson, json);
}
@Test
public void testPersonDeserialization() {
// JSON string to be deserialized
String json = "{\"full_name\":\"Jane Doe\",\"age_in_years\":25}";
// Deserialize the JSON to a Person object
Person person = gson.fromJson(json, Person.class);
// Assert that the deserialized object is correct
assertEquals("Jane Doe", person.getName());
assertEquals(25, person.getAge());
}
}
Explanation of the Unit Test:
- Test Setup (
@BeforeEach):setUp()মেথডে আমরা Gson এরPersonSerializerএবংPersonDeserializerরেজিস্টার করেছি।
- Serialization Test:
testPersonSerialization()মেথডে একটিPersonঅবজেক্ট তৈরি করে সেটিকেGsonএর মাধ্যমে JSON ফরম্যাটে সিরিয়ালাইজ করা হয়েছে। তারপর, এটি পরীক্ষা করা হয় যে JSON আউটপুটটি কাস্টম ফিল্ড নামের সাথে সঠিকভাবে তৈরি হয়েছে কিনা।
- Deserialization Test:
testPersonDeserialization()মেথডে JSON স্ট্রিং থেকে Person অবজেক্ট তৈরি করা হয় এবং তারপর যাচাই করা হয় যে নাম এবং বয়স সঠিকভাবে ডেসিরিয়ালাইজ হয়েছে কিনা।
Step 4: Run the Tests
আপনি JUnit টেস্টগুলি রান করে দেখতে পারেন যে, Gson এর কাস্টম সিরিয়ালাইজার এবং ডিজিরিয়ালাইজার সঠিকভাবে কাজ করছে কিনা। টেস্টের সফলতার জন্য, সঠিকভাবে কাস্টম ফিল্ড নাম (যেমন full_name, age_in_years) সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হবে।
Expected Output of Tests:
Test passed.
এখানে, দুটি টেস্ট সফলভাবে পাস করার জন্য প্রত্যাশিত আউটপুট:
testPersonSerialization()টেস্টটি নিশ্চিত করবে যে Person অবজেক্টটি সঠিকভাবে JSON এ সিরিয়ালাইজ হয়েছে এবং কাস্টম ফিল্ড নাম ব্যবহার করেছে।testPersonDeserialization()টেস্টটি JSON থেকে Person অবজেক্টে ডেসিরিয়ালাইজেশন পরীক্ষা করবে এবং সঠিক মানগুলি ফিরিয়ে আনবে।
Gson এর Custom Serializer এবং Deserializer এর জন্য Unit Test তৈরি করা খুবই সহজ এবং এতে আপনার কাস্টম সিরিয়ালাইজেশন এবং ডিজিরিয়ালাইজেশন লজিক যাচাই করা যায়। JUnit এবং Gson ব্যবহার করে আপনি Gson এর কার্যকারিতা এবং কাস্টম লজিক পরীক্ষা করতে পারবেন, যা ডেভেলপমেন্টে গুরুত্বপূর্ণ একটি অংশ।
Read more