9 أخطاء يجب تجنبها أثناء البرمجة بلغة جافا
ما الأخطاء التي يجب تجنبها أثناء البرمجة بلغة جافا؟ في المقالة التالية نجيب على هذا السؤال.
تعرّف على كيفية تشغيل اختبارات نموذج الحاويات في مقالنا المتعلق بـ Java حيث يعرض مطور جافا الأقدم لدينا كل السحر.
أستخدم سبرينغ بوت في المشروع للتقليل من النمط المتعارف عليه. حاويات الاختبار مستقلة عن إطار عمل الربيع ويمكنك استخدامها بدون ذلك.
أستخدم الإصدار 1.17.3 من Testcontainers، ولكن لا تتردد في استخدام الإصدار الأحدث. اختبارات مع حاوية Postgres.
عرّف الحاوية أولاً:
فئة عامة Postgres13TC فئة PostgreSQLContainer {
فئة Postgres13TC خاصة ثابتة ونهائية Postgres13TC TC = Postgres13TC() جديدة Postgres13TC();
خاص Postgres13TC() {) {
ممتاز("postgres:13.2");
}
عمومي ثابت Postgres13TC getInstance() {{
إرجاع TC;
}
@Overrride
عام باطل بدء عام() { {
super.start();
System.setProperty("DB_URL", TC.getJdbcUrl());
System.setProperty("DB_USERNAME"، TC.getUsername())؛
System.setProperty("DB_PASSWORD"، TC.getPassword())؛
}
@Overrride
إيقاف عام باطل() {{.
// لا تفعل شيئًا. هذا مثيل مشترك. دع JVM يتعامل مع هذه العملية.
}
}
ثم نقوم بتهيئة سياق تطبيق Spring. نحصل على جميع تكوينات مصدر البيانات من مثيل الحاوية ونقوم بتعيينها كتكوين الربيع:
تُنفذ الفئة العامة ContainerInit فئة ContainerInit تنفيذ ApplicationContextInitializer {
عام ثابت Postgres13TC postgres13TC;
ثابت {
postgres13TC = Postgres13TC.getInstance();
postgres13TC.start();
}
@Overrride
العمومية تهيئة باطلة عامة(ConfigurableApplicationContext applicationContext) { {
TestPropertySourceUtils.addInlinePropertiesToEnvironment(
applicationContext,
"spring.datasource.url=" + postgres13TC.getJdbcUrl(),
"spring.datasource.username=" + postgres13TC.getUsername(),
"spring.datasource.password=" + postgres13TC.getPassword(),
"db.host=" + + postgres13TC.getHost(),
"db.port=" + + postgres13TC.getMappingPort(postgres13TC.POSTGRESQL_PORT),
"db.name=" + postgres13TC.getDatabaseName(),
"db.username=" + postgres13TC.getUsername(),
"db.password=" + postgres13TC.getPassword()
);
}
}
وأخيراً، يمكننا تشغيل الاختبار، وسيبدأ كل شيء تحت الغطاء:
@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureTestDatabase(استبدال = NONE)
@ContextConfiguration(المُهيئات = ContainerInit.class)
@اختبار الحاويات
صنف DummyRepositoryTest {
@التلقائي
خاص DummyRepository dummyRepository;
@ اختبار
باطل shouldReturnDummy() { {
var byId = dummyRepository.getById(10L);
متغير متوقع = دمية جديدة();
المتوقع.setId(10L);
تأكيد أن (byId).يكمل().emitsCount(1).emitsCount(متوقع);
}
}
أو إذا أردنا إجراء اختبار الربيع المستقل، يمكننا استخدام الحاوية مباشرةً:
@ حاويات الاختبار
صنف SimpleDbTest {
@حاوية
خاص نهائي ثابت Postgres13TC postgres13TC = Postgres13TC.getInstance();
@ اختبار
باطل testConnection() { {
افترض أن (postgres13TC.isRunning());
var connectionProps = خصائص جديدة();
connectionProps.put("المستخدم"، postgres13TC.getUsername());
connectProps.put("كلمة المرور"، postgres13TC.getPassword())؛
محاولة (محاولة (اتصال اتصال اتصال = DriverManager.getConnection(postgres13TC.getJdbcUrl(),
connectProps)) {
var resultSet = connection.prepareStatement("حدد 1").executeQuery();
resultSet.next();
تأكيد أن(resultSet.getInt(1)).isEqualTo(1);
} التقاط (استثناء SQLEXception sqlException) {
تأكيد أن((استثناء) استثناء sqlException).doesNotThrowAnyException();
}
}
}
أدوات Testcontainers هي أدوات سهلة الاستخدام للغاية تساعدنا على إنشاء اختبارات التكامل التي تستخدم حاويات Docker. وهذا يمنحنا المزيد من المرونة ويزيد من سرعة التطوير. يقلل الإعداد الصحيح لتهيئة الاختبار من الوقت اللازم للمطورين الجدد. فهم لا يحتاجون إلى إعداد جميع التبعيات، فقط تشغيل الاختبارات المكتوبة بملفات التكوين المحددة.