בדיקה עצמאית באמצעות בסיס נתונים בזיכרון

1. סקירה כללית

במדריך זה אנו הולכים ליצור אפליקציית אביב פשוטה הנשענת על בסיס נתונים בזיכרון לבדיקה.

עבור הפרופיל הסטנדרטי, לאפליקציה תהיה תצורת בסיס נתונים MySQL עצמאית, הדורשת התקנת שרת MySQL והפעלתו, עם הגדרת משתמש ובסיס נתונים מתאימים.

כדי להקל על בדיקת היישום, נוותר על התצורה הנוספת הנדרשת על ידי MySQL ובמקום זאת נשתמש ב- H2 מסד נתונים בזיכרון להפעלת בדיקות JUnit.

2. תלות Maven

לצורך פיתוח אנו זקוקים לתלות הבאות:

 org.springframework spring-test 5.1.5.RELEASE org.springframework.data spring-data-jpa 2.1.5.RELEASE com.h2database h2 1.4.194 org.hibernate hibernate-core 5.2.17. 

ניתן להוריד את הגרסאות האחרונות של test-spring, spring-data-jpa, h2 ו- core-core מ Maven Central.

3. מודל נתונים ומאגר נתונים

בואו ניצור פשוט סטוּדֶנט מחלקה שתסומן כישות:

סטודנט בכיתה ציבורית @Entity {@ Id מזהה פרטי ארוך; שם מחרוזת פרטי; // קונסטרוקטור סטנדרטי, גטרים, סטרים}

לאחר מכן, בואו ניצור ממשק מאגר המבוסס על Spring Data JPA:

ממשק ציבורי StudentRepository מרחיב את JpaRepository {}

זה יאפשר לאביב ליצור תמיכה במניפולציות סטוּדֶנט חפצים.

4. מקורות נכסים נפרדים

כדי לאפשר שימוש בתצורות בסיס נתונים שונות עבור מצב רגיל ומצב בדיקה, אנו יכולים לקרוא את מאפייני מסד הנתונים מתוך קובץ שמיקומו שונה בהתאם למצב הריצה של היישום.

במצב רגיל, קובץ המאפיינים ישכון src / main / resources, ולשיטת הבדיקה, נשתמש בקובץ מאפיינים ב- src / test / resources תיקיה.

בעת הפעלת מבחן, היישום יחפש תחילה קבצים ב- src / test / resources תיקיה. אם הקובץ לא נמצא במיקום זה, הוא ישתמש בקובץ שהוגדר ב src / main / resources תיקיה. אם הקובץ קיים הוא מִבְחָן נתיב, אז זה יעקוף את זה מה רָאשִׁי נָתִיב.

4.1. הגדרת תיקי הרכוש

בואו ניצור התמדה- student.properties קובץ ב- src / main / resources תיקיה המגדירה מאפיינים עבור מקור נתונים של MySQL:

dbc.driverClassName = com.mysql.jdbc.Driver jdbc.url = jdbc: mysql: // localhost: 3306 / myDb jdbc.user = tutorialuser jdbc.pass = tutorialpass hibernate.dialect = org.hibernate.dialect.MySQL5Dialect hibernatel.hm .auto = יצירה ושחרור

במקרה של התצורה לעיל, נצטרך שיהיה לנו את myDb מסד הנתונים שנוצר וה- הדרכה משתמש / הדרכה לעבור הגדרת משתמש.

מכיוון שאנחנו רוצים להשתמש בבסיס נתונים בזיכרון לבדיקה, ניצור קובץ דומה עם אותו שם ב- src / test / resources תיקייה, המכילה מאפיינים עם אותם מקשים ו- H2 ערכים ספציפיים למסד נתונים:

jdbc.driverClassName = org.h2. דרייבר jdbc.url = jdbc: h2: mem: myDb; DB_CLOSE_DELAY = -1 hibernate.dialect = org.hibernate.dialect.H2Dialect hibernate.hbm2ddl.auto = create

הגדרנו את ה- H2 מסד נתונים כדי לחיות בזיכרון וליצור באופן אוטומטי, ואז להיסגר ולשחרר עם יציאת ה- JVM.

4.2. תצורת JPA

בואו ניצור @תְצוּרָה מחלקה המחפשת קובץ שנקרא התמדה- student.properties כמקור נכס ויוצר a מקור מידע באמצעות מאפייני מסד הנתונים המוגדרים בתוכו:

@Configuration @EnableJpaRepositories (basePackages = "com.baeldung.persistence.dao") @PropertySource ("persistence-student.properties") @EnableTransactionManagement מחלקה ציבורית StudentJpaConfig {@ Envired Private Environment env; @Bean DataSource ציבורי DataSource () {DriverManagerDataSource dataSource = חדש DriverManagerDataSource (); dataSource.setDriverClassName (env.getProperty ("jdbc.driverClassName")); dataSource.setUrl (env.getProperty ("jdbc.url")); dataSource.setUsername (env.getProperty ("jdbc.user")); dataSource.setPassword (env.getProperty ("jdbc.pass")); להחזיר dataSource; } // configure entityManagerFactory // configure transactionManager // הגדר מאפייני שינה נוספים

5. יצירת מבחן JUnit

בוא נכתוב בדיקת JUnit פשוטה המבוססת על התצורה שתוארה לעיל המשתמשת ב- מאגר סטודנטים כדי לשמור ולאחזר א סטוּדֶנט יֵשׁוּת:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {StudentJpaConfig.class}, loader = AnnotationConfigContextLoader.class) @Transactional public class InMemoryDBTest {@Resource studentRepository privateRepository; @ מבחן בטל פומבי givenStudent_whenSave_thenGetOk () {סטודנט סטודנט = סטודנט חדש (1, "ג'ון"); studentRepository.save (סטודנט); סטודנט סטודנט 2 = studentRepository.findOne (1); assertEquals ("john", student2.getName ()); }}

המבחן שלנו יתנהל באופן עצמאי לחלוטין - זה ייצור זיכרון H2 מסד נתונים, לבצע הצהרות, ואז לסגור את החיבור ולשחרר את מסד הנתונים, כפי שניתן לראות ביומן:

מידע: HHH000400: שימוש בניב: org.hibernate.dialect.H2Dialect Hibernate: drop table תלמיד אם קיים מצב שינה: create table student (id bigint not null, name varchar (255), key primary (id)) 24 במרץ, 2017 12: 41:51 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources מידע: HHH000476: ביצוע סקריפט הייבוא ​​'org.hiber [מוגן באמצעות דוא"ל] 1b8f9e2' Hibernate: בחר student0_.id כ- id1_0_0_, student0_.name בשם שם student_0_ איפה סטודנט 0_.id =? מצב שינה: שחרור טבלה תלמיד אם קיים

6. מסקנה

בדוגמה מהירה זו, הראינו כיצד אנו יכולים להריץ בדיקה עצמאית באמצעות בסיס נתונים בזיכרון.

כמו תמיד, ניתן למצוא את קוד המקור המלא ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found