జ్ఞాపకశక్తి మరియు పరీక్షలో ఆధారం
మరియు ఇప్పుడు అత్యంత ఆసక్తికరమైనది. హైబర్నేట్ కోడ్ని పరీక్షిస్తున్నప్పుడు, చాలా తరచుగా మీరు నిజమైన బేస్తో కాకుండా కనీస కార్యాచరణను అమలు చేసే ఒక రకమైన స్టబ్తో పని చేయాలనుకుంటున్నారు.
మీరు చాలా SQL సర్వర్ ప్రమాణాన్ని అమలు చేసే స్టబ్ని ఊహించగలరా? నేను కాదు. అయినప్పటికీ, ఇన్-మెమరీ డేటాబేస్లు అద్భుతమైనవి. ఇది సుమారుగా ఇలా పనిచేస్తుంది:
- @BeforeAll పద్ధతిలో, మేము ఇన్-మెమరీ డేటాబేస్ కనెక్షన్ని ప్రారంభిస్తాము.
- @BeforeEach పద్ధతిలో, మేము సెషన్ను పొందుతాము మరియు లావాదేవీని తెరుస్తాము.
- @పరీక్ష పద్ధతిలో, మేము ప్రస్తుత సెషన్ మరియు లావాదేవీతో పని చేస్తాము.
- @AfterEach పద్ధతిలో, మేము లావాదేవీకి కట్టుబడి ఉంటాము.
- చివరకు, AfterAll పద్ధతిలో, మేము డేటాబేస్కు కనెక్షన్ను మూసివేస్తాము.
పరీక్ష కోసం తయారీ ఎలా ఉంటుందో ఇక్కడ ఉంది:
@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);
}
}