நினைவகம் மற்றும் சோதனையின் அடிப்படை
இப்போது மிகவும் சுவாரஸ்யமானது. ஹைபர்னேட் குறியீட்டை சோதிக்கும் போது, பெரும்பாலும் நீங்கள் ஒரு உண்மையான அடித்தளத்துடன் வேலை செய்ய விரும்புவதில்லை, ஆனால் குறைந்தபட்ச செயல்பாட்டை செயல்படுத்தும் சில வகையான ஸ்டப் மூலம் வேலை செய்ய வேண்டும்.
பெரும்பாலான SQL சர்வர் தரநிலையைச் செயல்படுத்தும் ஒரு ஸ்டப்பை உங்களால் கற்பனை செய்ய முடியுமா? நான் இல்லை. இருப்பினும், நினைவகத்தில் உள்ள தரவுத்தளங்கள் சிறந்தவை. இது தோராயமாக இவ்வாறு செயல்படுகிறது:
- @BeforeAll முறையில், இன்-மெமரி தரவுத்தள இணைப்பை நாங்கள் துவக்குகிறோம்.
- @BeforeEach முறையில், நாங்கள் அமர்வைப் பெற்று பரிவர்த்தனையைத் திறக்கிறோம்.
- @Test முறையில், தற்போதைய அமர்வு மற்றும் பரிவர்த்தனையுடன் நாங்கள் வேலை செய்கிறோம்.
- @AfterEach முறையில், நாங்கள் பரிவர்த்தனை செய்கிறோம்.
- இறுதியாக, ஆஃப்டர் ஆல் முறையில், தரவுத்தளத்திற்கான இணைப்பை மூடுகிறோம்.
சோதனைக்கான தயாரிப்பு எப்படி இருக்கும் என்பது இங்கே:
@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();
}
ஹைபர்னேட்டின் வேலையில் சோதனை எப்படி இருக்கிறது:
@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());
}
}
சோதனை தரவு
சோதனைத் தரவுகளுடன் உங்கள் சோதனைத் தரவுத்தளத்தையும் விரிவுபடுத்தலாம்.
பொதுவாக இரண்டு sql கோப்புகள் இதற்காக உருவாக்கப்படுகின்றன:
- schema.sql தரவுத்தளத்தில் அட்டவணைகளை உருவாக்கும் ஸ்கிரிப்டைக் கொண்டுள்ளது
- test-data.sql ஆனது சோதனைத் தரவுகளுடன் அட்டவணைகளை விரிவுபடுத்தும் ஸ்கிரிப்டைக் கொண்டுள்ளது
அட்டவணை உருவாக்கம் மற்றும் சோதனைத் தரவு பொதுவாக வெவ்வேறு கோப்புகளாகப் பிரிக்கப்படுகின்றன, ஏனெனில் வெவ்வேறு சோதனைக் குழுக்களுக்கான சோதனைத் தரவுகளின் சொந்தக் குழுக்கள் எப்போதும் தோன்றும்.
இந்த கோப்புகளை இயக்குவது இதுபோல் தெரிகிறது:
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()
}
உங்கள் அமைவு முறை சிறிது மாறும்:
@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);
}
}
GO TO FULL VERSION