Custom Serializer/Deserializer এর জন্য Unit Test

Gson এর জন্য Unit Testing - জিসন (Gson) - Java Technologies

374

GsonCustom 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:

  1. Test Setup (@BeforeEach):
    • setUp() মেথডে আমরা Gson এর PersonSerializer এবং PersonDeserializer রেজিস্টার করেছি।
  2. Serialization Test:
    • testPersonSerialization() মেথডে একটি Person অবজেক্ট তৈরি করে সেটিকে Gson এর মাধ্যমে JSON ফরম্যাটে সিরিয়ালাইজ করা হয়েছে। তারপর, এটি পরীক্ষা করা হয় যে JSON আউটপুটটি কাস্টম ফিল্ড নামের সাথে সঠিকভাবে তৈরি হয়েছে কিনা।
  3. Deserialization Test:
    • testPersonDeserialization() মেথডে JSON স্ট্রিং থেকে Person অবজেক্ট তৈরি করা হয় এবং তারপর যাচাই করা হয় যে নাম এবং বয়স সঠিকভাবে ডেসিরিয়ালাইজ হয়েছে কিনা।

Step 4: Run the Tests

আপনি JUnit টেস্টগুলি রান করে দেখতে পারেন যে, Gson এর কাস্টম সিরিয়ালাইজার এবং ডিজিরিয়ালাইজার সঠিকভাবে কাজ করছে কিনা। টেস্টের সফলতার জন্য, সঠিকভাবে কাস্টম ফিল্ড নাম (যেমন full_name, age_in_years) সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হবে।


Expected Output of Tests:

Test passed.

এখানে, দুটি টেস্ট সফলভাবে পাস করার জন্য প্রত্যাশিত আউটপুট:

  1. testPersonSerialization() টেস্টটি নিশ্চিত করবে যে Person অবজেক্টটি সঠিকভাবে JSON এ সিরিয়ালাইজ হয়েছে এবং কাস্টম ফিল্ড নাম ব্যবহার করেছে।
  2. testPersonDeserialization() টেস্টটি JSON থেকে Person অবজেক্টে ডেসিরিয়ালাইজেশন পরীক্ষা করবে এবং সঠিক মানগুলি ফিরিয়ে আনবে।

Gson এর Custom Serializer এবং Deserializer এর জন্য Unit Test তৈরি করা খুবই সহজ এবং এতে আপনার কাস্টম সিরিয়ালাইজেশন এবং ডিজিরিয়ালাইজেশন লজিক যাচাই করা যায়। JUnit এবং Gson ব্যবহার করে আপনি Gson এর কার্যকারিতা এবং কাস্টম লজিক পরীক্ষা করতে পারবেন, যা ডেভেলপমেন্টে গুরুত্বপূর্ণ একটি অংশ।

Content added By
Promotion

Are you sure to start over?

Loading...