কোয়ার্কাস এবং লিকুইবেসের সাথে পরীক্ষার চ্যালেঞ্জগুলি অতিক্রম করা
আধুনিক অ্যাপ্লিকেশনের স্থিতিশীলতা নিশ্চিত করার জন্য কার্যকরী ইন্টিগ্রেশন পরীক্ষা লেখা অপরিহার্য, বিশেষ করে যখন প্রযুক্তি ব্যবহার করে , , এবং . যাইহোক, প্রক্রিয়া সবসময় সহজবোধ্য নয়। ডেভেলপাররা প্রায়ই অপ্রত্যাশিত চ্যালেঞ্জের সম্মুখীন হয়, যেমন রিসোর্স দ্বন্দ্ব বা অনুপযুক্ত কনফিগারেশন।
পরীক্ষায় ডাটাবেস মাইগ্রেশনের সাথে কাজ করার সময় একটি সাধারণ সমস্যা দেখা দেয়। Liquibase কনফিগার করার সময় ব্যয় করার কল্পনা করুন, শুধুমাত্র আপনার মাইগ্রেশন স্ক্রিপ্টগুলি একটি ডাটাবেস কন্টেইনারে চলে, যখন আপনার অ্যাপ্লিকেশন অন্যটির সাথে সংযুক্ত হয়। হতাশাজনক, তাই না? 🐛
এই পোস্টে, আমি একই ধরনের চ্যালেঞ্জ মোকাবেলায় আমার অভিজ্ঞতা শেয়ার করব: টেস্ট কনটেইনার এবং লিকুইবেসের সাথে কোয়ার্কাস অ্যাপ্লিকেশনে ইন্টিগ্রেশন পরীক্ষা চালানো। আমি যে অদ্ভুত আচরণটি লক্ষ্য করেছি তা হল একাধিক ডাটাবেস কন্টেইনার তৈরি করা হচ্ছে, যার ফলে পরীক্ষা ব্যর্থ হয়েছে। এই পোস্টটি ডিবাগিং এবং এই সমস্যা সমাধানে ডুব দেবে৷
আপনি যদি কখনও এই জাতীয় সমস্যার মুখোমুখি হন তবে আপনি একা নন। আমরা ধাপে ধাপে অন্বেষণ করব কীভাবে মূল কারণ শনাক্ত করা যায় এবং আপনার পরীক্ষাগুলি নির্বিঘ্নে কাজ করে তা নিশ্চিত করা যায়। একটি কার্যকরী উদাহরণ এবং ব্যবহারিক টিপস দিয়ে, আপনি সাধারণ সমস্যাগুলি এড়াতে এবং শক্তিশালী একীকরণ পরীক্ষা তৈরি করতে সক্ষম হবেন। 🚀
আদেশ | ব্যবহারের উদাহরণ |
---|---|
QuarkusTestResource | একটি কাস্টম টেস্ট রিসোর্স লাইফসাইকেল ম্যানেজার নিবন্ধন করতে ব্যবহৃত হয়, যেমন PostgreSQLTestResource, কোয়ার্কাস পরীক্ষার সময় বাহ্যিক নির্ভরতা পরিচালনা করতে। |
withReuse(true) | একটি TestContainers পদ্ধতি একাধিক পরীক্ষা জুড়ে কন্টেইনার পুনঃব্যবহারের অনুমতি দেয়, একটি ডাটাবেস কন্টেইনার পুনরায় ব্যবহার করার সময় স্টার্টআপের সময় হ্রাস করে। |
QuarkusTestProfile | নির্দিষ্ট কনফিগারেশন ওভাররাইড করার জন্য একটি কাস্টম টেস্ট প্রোফাইল সংজ্ঞায়িত করে, যেমন একটি ভিন্ন কনফিগারেশন ফাইল পাথ বা প্রোফাইল-নির্দিষ্ট বৈশিষ্ট্য সেট করা। |
withDatabaseName | PostgreSQL কন্টেইনারের মধ্যে তৈরি করা ডাটাবেসের নাম সেট করে। পরীক্ষা-নির্দিষ্ট ডাটাবেস উদাহরণ সংজ্ঞায়িত করার জন্য দরকারী। |
given() | RestAssured থেকে একটি পদ্ধতি HTTP অনুরোধ পাঠাতে পরীক্ষায় ব্যবহৃত হয়, যা শেষ পয়েন্ট এবং প্রতিক্রিয়া ডেটার বৈধতা সক্ষম করে। |
then() | রেসপন্স স্ট্যাটাস বা বডি যাচাই করার জন্য RestAssured-এ একটি অনুরোধের পরে চেইন করা হয়েছে। উদাহরণস্বরূপ, স্ট্যাটাস কোড বা ডেটা ফরম্যাট পরীক্ষা করা। |
Map.of | একটি সংক্ষিপ্ত উপায়ে অপরিবর্তনীয় মানচিত্র তৈরি করার জন্য জাভা 9-এ প্রবর্তিত একটি পদ্ধতি, পরীক্ষা প্রোফাইলের জন্য কনফিগারেশন বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে এখানে ব্যবহার করা হয়েছে। |
getJdbcUrl | PostgreSQL TestContainer-এর জন্য JDBC সংযোগ স্ট্রিং প্রদান করে, অ্যাপ্লিকেশনটি সঠিক কন্টেইনারের সাথে সংযোগ নিশ্চিত করে। |
@QuarkusTest | কোয়ার্কাস ফ্রেমওয়ার্ক পরিবেশে একটি পরীক্ষা চালানোর জন্য ব্যবহৃত একটি টীকা, পরীক্ষায় নির্ভরতা ইনজেকশন এবং কোয়ার্কাস-নির্দিষ্ট বৈশিষ্ট্যের অনুমতি দেয়। |
@TestProfile | একটি নির্দিষ্ট কোয়ার্কাস পরীক্ষার প্রোফাইলের সাথে একটি পরীক্ষা ক্লাস সংযুক্ত করে, পরীক্ষা সম্পাদনের সময় উপযুক্ত কনফিগারেশন প্রয়োগ করা হয়েছে তা নিশ্চিত করে। |
কোয়ার্কাসে লিকুইবেস এবং টেস্ট কন্টেইনার দ্বন্দ্ব কীভাবে সমাধান করবেন
পূর্বে প্রদত্ত স্ক্রিপ্টগুলি ব্যবহার করে একটি কোয়ার্কাস অ্যাপ্লিকেশনে ইন্টিগ্রেশন টেস্টিং পরিচালনা করার জন্য একটি ব্যবহারিক পদ্ধতি প্রদর্শন করে এবং . মূল লক্ষ্য হল আপনার অ্যাপ্লিকেশনটি একই ডাটাবেস কন্টেইনারের সাথে ইন্টারঅ্যাক্ট করে যেখানে Liquibase মাইগ্রেশন স্ক্রিপ্টগুলি চালায় তা নিশ্চিত করা। এটি একটি কাস্টম লাইফসাইকেল ম্যানেজার, `PostgreSQLTestResource` তৈরি করে অর্জন করা হয়, যেটি প্রোগ্রাম্যাটিকভাবে একটি PostgreSQL কন্টেইনার শুরু করে এবং কোয়ার্কাস অ্যাপ্লিকেশনকে পরীক্ষায় এর কনফিগারেশনের বিশদ প্রদান করে। এটি অনিচ্ছাকৃতভাবে একটি দ্বিতীয় ধারক তৈরি করে অ্যাপ্লিকেশনটির সাধারণ সমস্যা এড়ায়, যা অসঙ্গতির দিকে নিয়ে যেতে পারে। 🚀
`withReuse(true)` পদ্ধতির ব্যবহার নিশ্চিত করে যে PostgreSQL কন্টেইনার পরীক্ষার মধ্যে সক্রিয় থাকে, প্রতিটি পরীক্ষার ক্ষেত্রে রিস্টার্ট করা কন্টেইনারগুলির ওভারহেড কমিয়ে দেয়। এটি এমন পরিস্থিতিতে বিশেষভাবে কার্যকর যেখানে একাধিক পরীক্ষার ক্লাস একই ডাটাবেস অবস্থা অ্যাক্সেস করতে হবে। কাস্টম `TestProfileResolver` কোয়ার্কাসকে সঠিক কনফিগারেশন ফাইলের দিকে নির্দেশ করে এবং টেস্ট কন্টেইনারের সেটআপের সাথে সারিবদ্ধ করার জন্য ডাটাবেস URL এবং লিকুইবেস কনফিগারেশনের মতো নির্দিষ্ট বৈশিষ্ট্য ওভাররাইড করে ধারাবাহিকতা নিশ্চিত করে। কনফিগারেশনের জন্য সত্যের একক উৎস বজায় রাখার মাধ্যমে, আপনি অমিল পরিবেশের কারণে সৃষ্ট ত্রুটিগুলি কমিয়ে আনবেন।
পরীক্ষার স্ক্রিপ্ট `XServiceTest`-এর মধ্যে, `@QuarkusTestResource` টীকাটি কাস্টম টেস্ট রিসোর্সকে পরীক্ষার ক্লাসে আবদ্ধ করে। এটি রানটাইমে কন্টেইনার কনফিগারেশন ইনজেকশন করার জন্য অত্যন্ত গুরুত্বপূর্ণ, এটি নিশ্চিত করে যে অ্যাপ্লিকেশন এবং লিকুইবেস একই ডাটাবেস উদাহরণে কাজ করে। উপরন্তু, `@Inject` টীকাটি `XTypeVersionService`-কে ওয়্যার আপ করতে ব্যবহৃত হয়, এমন একটি পরিষেবা যা ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করে। টেস্ট কেস `getXTypeVersion` চালানোর মাধ্যমে, আপনি যাচাই করেন যে প্রত্যাশিত ডেটা ডেটাবেস পোস্ট-মাইগ্রেশনে বিদ্যমান, নিশ্চিত করে যে Liquibase সঠিক কন্টেইনারে সফলভাবে কার্যকর হয়েছে।
একটি পরীক্ষা চালানোর কল্পনা করুন, সমস্ত পরিষেবাগুলি সারিবদ্ধ হওয়ার আশা করছেন, কিন্তু অনুপযুক্ত কনফিগারেশনের কারণে কোনও ফলাফল খুঁজে পাচ্ছেন না - এটি ডিবাগ করার সময় নষ্ট করতে পারে। এই স্ক্রিপ্টগুলি পরীক্ষার পরিবেশের জীবনচক্রকে সুস্পষ্টভাবে পরিচালনা করে এবং সামঞ্জস্যপূর্ণ আচরণ নিশ্চিত করে এই ধরনের পরিস্থিতি প্রতিরোধ করার জন্য ডিজাইন করা হয়েছে। অধিকন্তু, RestAssured-এর মতো টুলগুলি API এন্ডপয়েন্টগুলিকে বৈধ করে, একটি পূর্ণ-স্ট্যাক পরীক্ষার পরিস্থিতি সক্ষম করে যেখানে ব্যাকএন্ড মাইগ্রেশন এবং ফ্রন্টএন্ড ইন্টারঅ্যাকশন উভয়ই যাচাই করা হয়। এই কনফিগারেশনগুলির জায়গায়, আপনি আরও শক্তিশালী পরীক্ষাগুলি বিকাশ করতে পারেন, পরিবেশগত অমিলগুলি দূর করতে পারেন এবং আপনার দলের পরীক্ষার কাঠামো যতটা সম্ভব দক্ষ তা নিশ্চিত করতে পারেন। 🔧
কোয়ার্কাসে লিকুইবেস এবং টেস্ট কন্টেইনারগুলির মধ্যে যথাযথ ইন্টিগ্রেশন নিশ্চিত করা
PostgreSQL এবং Liquibase মাইগ্রেশন পরিচালনা করতে TestContainers সহ Quarkus ব্যবহার করে ব্যাকএন্ড সমাধান। এই স্ক্রিপ্ট কন্টেইনার মিসলাইনমেন্ট সমস্যা সমাধান করে।
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.utility.DockerImageName;
import java.util.HashMap;
import java.util.Map;
public class PostgreSQLTestResource implements QuarkusTestResourceLifecycleManager {
private static PostgreSQLContainer//> postgreSQLContainer;
@Override
public Map<String, String> start() {
postgreSQLContainer = new PostgreSQLContainer<>(DockerImageName.parse("postgres:alpine"))
.withDatabaseName("test")
.withUsername("postgres")
.withPassword("password")
.withReuse(true);
postgreSQLContainer.start();
Map<String, String> config = new HashMap<>();
config.put("quarkus.datasource.jdbc.url", postgreSQLContainer.getJdbcUrl());
config.put("quarkus.datasource.username", postgreSQLContainer.getUsername());
config.put("quarkus.datasource.password", postgreSQLContainer.getPassword());
return config;
}
@Override
public void stop() {
if (postgreSQLContainer != null) {
postgreSQLContainer.stop();
}
}
}
ইউনিট পরীক্ষা ব্যবহার করে অ্যাপ্লিকেশন-লিকুইবেস ইন্টিগ্রেশন যাচাই করা
একটি মডুলার এবং পুনঃব্যবহারযোগ্য কোয়ার্কাস পরীক্ষার উদাহরণ যা ডাটাবেস সংযোগ এবং মাইগ্রেশন স্ক্রিপ্ট এক্সিকিউশন যাচাই করে।
import org.junit.jupiter.api.Test;
import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.TestProfile;
@QuarkusTest
@TestProfile(TestProfileResolver.class)
public class XServiceTest {
@Inject
XTypeVersionService xTypeVersionService;
@Test
public void getXTypeVersion() {
List<XTypeVersionEntity> entities = xTypeVersionService.get();
assertFalse(entities.isEmpty(), "The entity list should not be empty.");
}
}
পরীক্ষা প্রোফাইল জুড়ে কনফিগারেশন সামঞ্জস্য নিশ্চিত করা
Liquibase এবং অ্যাপ্লিকেশন কন্টেইনারগুলির মধ্যে প্রান্তিককরণের নিশ্চয়তা দিতে কাস্টম টেস্ট প্রোফাইল কনফিগারেশন।
public class TestProfileResolver implements QuarkusTestProfile {
@Override
public String getConfigProfile() {
return "test";
}
@Override
public Map<String, String> getConfigOverrides() {
return Map.of("quarkus.config.locations", "src/test/resources/application.yaml");
}
}
ডেটা যাচাইকরণের জন্য ফ্রন্ট-এন্ড সিমুলেশন
ডাটাবেস ইন্টিগ্রেশন থেকে ডেটা সঠিকভাবে প্রদর্শিত হয়েছে তা নিশ্চিত করতে ডায়নামিক ফ্রন্ট-এন্ড কোড স্নিপেট।
fetch('/api/xTypeVersion')
.then(response => response.json())
.then(data => {
const list = document.getElementById('entity-list');
data.forEach(entity => {
const item = document.createElement('li');
item.textContent = entity.name;
list.appendChild(item);
});
})
.catch(error => console.error('Error fetching data:', error));
ব্যাকএন্ড এবং ফ্রন্ট-এন্ড সামঞ্জস্যের জন্য ইউনিট পরীক্ষা
পরীক্ষার ডেটার সাথে ব্যাকএন্ড লজিক এবং ফ্রন্ট-এন্ড ইন্টিগ্রেশন উভয়ই যাচাই করার জন্য পরীক্ষার স্ক্রিপ্টের উদাহরণ।
import org.junit.jupiter.api.Test;
public class FrontEndValidationTest {
@Test
public void fetchData() {
given().when().get("/api/xTypeVersion")
.then().statusCode(200)
.body("size()", greaterThan(0));
}
}
কোয়ার্কাস টেস্টের জন্য ডাটাবেস ইন্টিগ্রেশন অপ্টিমাইজ করা
কোয়ার্কাস পরিবেশে ইন্টিগ্রেশন পরীক্ষার সাথে কাজ করার সময়, ডাটাবেস কন্টেইনার ব্যবস্থাপনাকে কার্যকরভাবে সম্বোধন করা অত্যন্ত গুরুত্বপূর্ণ। একটি সাধারণ সমস্যা যেমন অ্যাপ্লিকেশন এবং মাইগ্রেশন সরঞ্জামগুলির মধ্যে অমিল কন্টেইনার থেকে দেখা দেয় . একটি মূল সমাধান লিভারেজ মধ্যে মিথ্যা লাইব্রেরি, যা নিশ্চিত করে যে আপনার অ্যাপ্লিকেশন এবং মাইগ্রেশন স্ক্রিপ্ট উভয়ই একই পাত্রে কাজ করে। এই পদ্ধতিটি ডুপ্লিকেট কন্টেইনার তৈরি করা এড়ায় এবং পরীক্ষার জীবনচক্র জুড়ে কনফিগারেশনগুলি সারিবদ্ধ রাখে। 🎯
বিবেচনা করার আরেকটি গুরুত্বপূর্ণ দিক হল মাইগ্রেশন কৌশল। অনেক ক্ষেত্রে, ডেভেলপাররা একটি নতুন ডাটাবেস অবস্থা নিশ্চিত করতে পরীক্ষার সময় `ড্রপ-এন্ড-ক্রিট` কৌশল ব্যবহার করে। যাইহোক, আপনি Liquibase ব্যবহার করে পরীক্ষার ডেটা সহ ডাটাবেস বীজ করতে চাইতে পারেন। এটি কার্যকরভাবে করতে, একটি প্রাথমিককরণ SQL স্ক্রিপ্ট অন্তর্ভুক্ত করুন এবং `TC_INITSCRIPT` বৈশিষ্ট্যের মাধ্যমে কনফিগার করুন। এই পদ্ধতিটি নিশ্চিত করে যে আপনার পরীক্ষা চালানোর আগে ডেটাবেস কাঠামো এবং প্রয়োজনীয় পরীক্ষার ডেটা উভয়ই প্রস্তুত, অনুপস্থিত রেকর্ডের কারণে সৃষ্ট ত্রুটিগুলি দূর করে।
অবশেষে, নিরীক্ষণ লগ একটি জীবন রক্ষাকারী হতে পারে. Quarkus এবং Liquibase উভয়ই বিস্তারিত লগিং বিকল্প প্রদান করে, যা আপনাকে সংযোগ সমস্যা বা ভুল কনফিগারেশন ডিবাগ করতে সাহায্য করতে পারে। উপযুক্ত লগ লেভেল সেট করে, আপনি Liquibase স্ক্রিপ্ট প্রত্যাশিতভাবে চলছে কিনা তা পর্যবেক্ষণ করতে পারেন এবং ডাটাবেসের সাথে সংযোগ করতে ব্যবহৃত URL গুলি যাচাই করতে পারেন। এই স্তরের দৃশ্যমানতা পরীক্ষা সম্পাদনের সময় যে কোনও দ্বন্দ্বের সমাধানের জন্য অপরিহার্য, আপনাকে একটি শক্তিশালী পরীক্ষার কাঠামো তৈরি করতে সহায়তা করে। 🚀
- ভূমিকা কি ইন্টিগ্রেশন পরীক্ষায়?
- পরীক্ষার সময় বিচ্ছিন্ন ডাটাবেস দৃষ্টান্ত পরিচালনা করতে সাহায্য করে, সামঞ্জস্যপূর্ণ পরিবেশ নিশ্চিত করে।
- আমি কেন প্রয়োজন আদেশ?
- দ কমান্ড আপনাকে একাধিক পরীক্ষা জুড়ে একই ধারক পুনরায় ব্যবহার করতে দেয়, সম্পদ এবং সেটআপ সময় বাঁচাতে পারে।
- এর উদ্দেশ্য কি সম্পত্তি?
- দ কন্টেইনার স্টার্টআপে ডাটাবেস সিড করার জন্য প্রোপার্টি একটি ইনিশিয়ালাইজেশন এসকিউএল স্ক্রিপ্ট নির্দিষ্ট করে।
- আমি কিভাবে নিশ্চিত করব যে লিকুইবেস মাইগ্রেশন সঠিকভাবে প্রয়োগ করা হয়েছে?
- কনফিগার করে সম্পত্তি, আপনি নিশ্চিত করতে পারেন যে লিকুইবেস অ্যাপ্লিকেশন হিসাবে একই ডাটাবেস ধারক ব্যবহার করে।
- ডিবাগিং এর জন্য আমার কোন লগ লেভেল ব্যবহার করা উচিত?
- সেট বা ডাটাবেস ক্রিয়াকলাপ এবং স্থানান্তর নিরীক্ষণের জন্য Liquibase এবং TestContainers-এর স্তর।
- কিভাবে আমি বীজযুক্ত ডেটা দিয়ে API প্রতিক্রিয়া পরীক্ষা করতে পারি?
- এর মতো টুল ব্যবহার করুন এন্ডপয়েন্টে অনুরোধ পাঠাতে এবং প্রত্যাবর্তিত ডেটা পরীক্ষার ডেটার সাথে মেলে তা যাচাই করতে।
- কি করে টীকা করতে?
- দ টীকা ডাটাবেসের মতো বাহ্যিক নির্ভরতার জন্য একটি কাস্টম লাইফসাইকেল ম্যানেজার নিবন্ধন করে।
- কেন আমার একটি কাস্টম TestProfileResolver প্রয়োজন?
- এটি নিশ্চিত করে যে সঠিক কনফিগারেশনগুলি পরীক্ষা সম্পাদনের জন্য লোড করা হয়েছে, পরিবেশের ভেরিয়েবল এবং সংস্থানগুলি সারিবদ্ধ করা হয়েছে।
- একাধিক পাত্র তৈরি করা হচ্ছে কিনা তা আমি কিভাবে সনাক্ত করতে পারি?
- আপনার ডকার ডেস্কটপ পরীক্ষা করুন বা ডুপ্লিকেট কন্টেইনার উদাহরণ এবং তাদের নিজ নিজ পোর্টের জন্য কনসোল লগগুলি নিরীক্ষণ করুন।
- পরীক্ষার সম্পদ পরিষ্কার করার সেরা উপায় কি?
- ওভাররাইড করুন আপনার লাইফসাইকেল ম্যানেজারের পদ্ধতি পরীক্ষা শেষ হওয়ার পরে কন্টেইনারটি থামাতে এবং অপসারণ করতে।
Quarkus, Liquibase, এবং TestContainers-এর সাথে ইন্টিগ্রেশন টেস্টিং-এর জন্য মাইগ্রেশন এবং ডাটাবেসের মিথস্ক্রিয়া সারিবদ্ধ নিশ্চিত করার জন্য সতর্কতামূলক সেটআপ প্রয়োজন। আপনার টেস্ট রিসোর্স ম্যানেজার কাস্টমাইজ করে এবং একটি ইউনিফাইড কনফিগারেশন ব্যবহার করে, আপনি Liquibase এবং আপনার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত কন্টেইনারগুলির মধ্যে বিরোধ দূর করতে পারেন।
এই পদক্ষেপগুলি আপনার পরীক্ষার প্রক্রিয়াটিকে স্ট্রীমলাইন করতে সাহায্য করে, আপনার পরীক্ষাগুলিকে ডিবাগ করা এবং যাচাই করা সহজ করে তোলে৷ বিস্তারিত লগ ব্যবহার করতে মনে রাখবেন, যেমন সক্রিয় করা Liquibase-এর জন্য, আপনার পরীক্ষার আচরণ নিরীক্ষণ করতে এবং অসঙ্গতিগুলি তাড়াতাড়ি সমাধান করতে। এই পদ্ধতির সাহায্যে, আপনি আত্মবিশ্বাসের সাথে পরিমাপযোগ্য এবং রক্ষণাবেক্ষণযোগ্য পরীক্ষাগুলি তৈরি করতে পারেন। 🐛
- ব্যবহার সম্পর্কে বিশদভাবে বর্ণনা করে পরীক্ষার সময় ডাটাবেস মাইগ্রেশন পরিচালনার জন্য। অফিসিয়াল ডকুমেন্টেশন দেখুন: লিকুইবেস ডকুমেন্টেশন .
- কিভাবে বর্ণনা করে পরীক্ষার জন্য গতিশীল কন্টেইনারাইজড পরিবেশ প্রদান করে। তথ্যসূত্র: টেস্ট কনটেইনার অফিসিয়াল সাইট .
- মধ্যে উন্নত পরীক্ষার নিদর্শন আলোচনা পরীক্ষা প্রোফাইল এবং জীবনচক্র ব্যবস্থাপনা সহ। এখানে আরও জানুন: কোয়ার্কাস টেস্টিং গাইড .
- একাধিক কন্টেইনার জড়িত ইন্টিগ্রেশন সমস্যাগুলি কীভাবে পরিচালনা করবেন তা ব্যাখ্যা করে। সম্প্রদায়ের সম্পদ: StackOverflow Test Containers ট্যাগ .
- অতিরিক্ত অন্তর্দৃষ্টি TestContainers এ কনফিগারেশন: TestContainers PostgreSQL মডিউল .