JavaRush /Kurslar /All lectures for UZ purposes /Hibernate kodini test qilish

Hibernate kodini test qilish

All lectures for UZ purposes
Daraja, Dars
Mavjud

Pametda asos va testlash

Endi eng qiziqarli qism. Hibernate kodini test qilganda juda ko‘p hollarda haqiqiy bazada ishlashni emas, balki minimal funktsionallikni amalga oshiradigan qandaydir stub bilan ishlashni xohlaysiz.

SQL-server standartining katta qismini amalga oshiradigan stubni tasavvur qilayapsizmi? Men — yo‘q. Ammo buning uchun idealdan biri pametda ma'lumotlar bazalari hisoblanadi. Bu taxminan quyidagi sxema bo‘yicha ishlaydi:

  • @BeforeAll metodida pametdagi ma'lumotlar bazasiga ulanishni ishga tushiramiz.
  • @BeforeEach metodida sessiyani olib tranzaktsiyani ochamiz.
  • @Test metodida hozirgi sessiya va tranzaktsiya bilan ishlaymiz.
  • @AfterEach metodida tranzaktsiyani commit qilamiz.
  • Va nihoyat, AfterAll metodida bazaga ulanishni yopamiz.

Testga tayyorgarlik ko'rinishi quyidagicha:


// Testga tayyorgarlik
@Test
public class HelloTest {
  private static SessionFactory sessionFactory = null;
  private Session session = null;
 
  @BeforeAll
  static void setup(){
    try {
  	StandardServiceRegistry standardRegistry  = new StandardServiceRegistryBuilder()
      	.configure("hibernate-test.cfg.xml").build();
 
  	Metadata metadata = new MetadataSources(standardRegistry)
      	.addAnnotatedClass(Employee.class)
      	.getMetadataBuilder()
      	.build();
 
      sessionFactory = metadata.getSessionFactoryBuilder().build();
 
    } catch (Throwable ex) {
        throw new ExceptionInInitializerError(ex);
    }
  }
 
  @BeforeEach
  void setupThis(){
      session = sessionFactory.openSession();
      session.beginTransaction();
  }
 
  @AfterEach
  void tearThis(){
      session.getTransaction().commit();
  }
 
  @AfterAll
  static void tear(){
      sessionFactory.close();
  }

Hibernate bilan ishlaydigan test quyidagicha ko'rinadi:


// Hibernate bilan test
  @Test
public class HelloTest {
 
  @Test
  void createSessionFactoryWithXML() {
       Employee emp = new Employee();
       emp.setEmail("demo-user@mail.com");
       emp.setFirstName("demo");
       emp.setLastName("user");
 
       Assertions.assertNull(emp.getEmployeeId());
       session.persist(emp);
       Assertions.assertNotNull(emp.getEmployeeId());
  }
}

Test ma'lumotlari

Siz test bazangizni test ma'lumotlari bilan to'ldirishingiz mumkin.

Buning uchun odatda ikki sql-fayl yaratiladi:

  • schema.sql - bu bazada jadval yaratuvchi skriptni o'z ichiga oladi
  • test-data.sql - bu jadvallarni test ma'lumotlari bilan to'ldiruvchi skriptni o'z ichiga oladi

Jadval yaratish va test ma'lumotlari odatda turli fayllarga ajratiladi, chunki deyarli har doim turli test guruhlari uchun o'z test ma'lumotlari guruhlari paydo bo'ladi.

Bu fayllarning bajarilishi quyidagicha ko'rinadi:


// SQL fayl bajarilishi
  void runSqlScriptFile(String filePath){
    	String sqlScript = new String( Files.readAllBytes(Paths.get(filePath)) );
    	Session session = sessionFactory.openSession();
        Query query = session.createNativeQuery("BEGIN " + sqlScript + " END;");
        query.executeUpdate()
  }

Va sizning setup metodingiz ozgina o'zgaradi:


// Setup metodi
  @BeforeAll
  static void setup(){
    try {
  	StandardServiceRegistry standardRegistry  = new StandardServiceRegistryBuilder()
      	.configure("hibernate-test.cfg.xml").build();
 
  	Metadata metadata = new MetadataSources(standardRegistry)
      	.addAnnotatedClass(Employee.class)
      	.getMetadataBuilder()
      	.build();
 
  	sessionFactory = metadata.getSessionFactoryBuilder().build();
  	runSqlScriptFile(“scema.sql”);
  	runSqlScriptFile(“test-data.sql”);
 
    } catch (Throwable ex) {
        throw new ExceptionInInitializerError(ex);
    }
  }

O'z Hibernate'ni yozamiz

Loyiha kodi

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION