אביב בדיקות יחידת תבנית Jdbc

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

אביב JdbcTemplate הוא כלי רב עוצמה עבור מפתחים להתמקד בכתיבת שאילתות SQL וחילוץ תוצאות. זה מתחבר למסד הנתונים האחורי ומבצע ישירות שאילתות SQL.

לכן, אנו יכולים להשתמש במבחני אינטגרציה כדי לוודא שנוכל לשלוף נתונים ממסד הנתונים כהלכה. כמו כן, אנו יכולים לכתוב בדיקות יחידה כדי לבדוק את נכונות הפונקציות הקשורות.

במדריך זה נראה כיצד ניתן לבדוק את היחידות JdbcTemplate קוד.

2. JdbcTemplate ורישום שאילתות

ראשית, נתחיל במחלקה של אובייקט גישה לנתונים (DAO) המשתמשת JdbcTemplate:

מעמד ציבורי EmployeeDAO {private JdbcTemplate jdbcTemplate; ריק ריק setDataSource (DataSource dataSource) {jdbcTemplate = חדש JdbcTemplate (dataSource); } public int getCountOfEmployees () {return jdbcTemplate.queryForObject ("בחר ספירה (*) מהעובד", Integer.class); }}

אנו תלויים - מזריקים א מקור מידע חפץ לתוך EmployeeDAO מעמד. לאחר מכן, אנו יוצרים את JdbcTemplate אובייקט בשיטת הקובע. כמו כן, אנו משתמשים JdbcTemplate בשיטה לדוגמא getCountOfEmployees ().

ישנן שתי דרכים להשתמש בשיטות בדיקת יחידות JdbcTemplate.

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

לחלופין, אנו יכולים גם ללעוג ל JdbcTemplate התנגד לבדיקת פונקציונליות השיטה.

3.מבחן יחידה עם מסד נתונים H2

אנו יכולים ליצור מקור נתונים המתחבר למסד הנתונים H2 ולהזריק אותו ל- EmployeeDAO מעמד:

@Test ציבורי בטל כאשרInjectInMemoryDataSource_thenReturnCorrectEmployeeCount () {DataSource dataSource = new EmbeddedDatabaseBuilder (). SetType (EmbeddedDatabaseType.H2) .addScript ("classpath: jdbc / schema.sql") .adds (". .לִבנוֹת(); EmployeeDAO עובדDAO = EmployeeDAO חדש (); עובדDAO.setDataSource (dataSource); assertEquals (4, עובדDAO.getCountOfEmployees ()); }

במבחן זה, אנו בונים תחילה מקור נתונים על בסיס הנתונים H2. במהלך הבנייה, אנו מבצעים schema.sql ליצור את עוֹבֵד שולחן:

צור עובד מועסק (מזהה int לא מפתח ראשוני NULL, FIRST_NAME varchar (255), LAST_NAME varchar (255), ADDRESS varchar (255));

כמו כן, אנחנו רצים test-data.sql כדי להוסיף נתוני בדיקה לטבלה:

הכנס לערכי העובד (1, 'ג'יימס', 'גוסלינג', 'קנדה'); הכנס לערכי העובד (2, 'דונלד', 'קנוט', 'ארה"ב'); הכנס לערכי העובד (3, 'לינוס', 'טורוואלדס', 'פינלנד'); הכנס לערכי העובד (4, 'דניס', 'ריצ'י', 'ארה"ב');

לאחר מכן נוכל להזרים מקור נתונים זה ל- EmployeeDAO בכיתה ולבדוק את getCountOfEmployees שיטה על בסיס נתונים H2 בזיכרון.

4.מבחן יחידה עם אובייקט מדומה

אנחנו יכולים ללעוג ל JdbcTemplate התנגד כך שלא נצטרך להריץ את משפט SQL במסד נתונים:

מעמד ציבורי עובדDAOUnitTest {@Mock JdbcTemplate jdbcTemplate; @Test הציבור בטל כאשרMockJdbcTemplate_thenReturnCorrectEmployeeCount () {EmployeeDAO עובדDAO = EmployeeDAO חדש (); ReflectionTestUtils.setField (עובדDAO, "jdbcTemplate", jdbcTemplate); Mockito.when (jdbcTemplate.queryForObject ("בחר ספירה (*) מהעובד", Integer.class)) .thenReturn (4); assertEquals (4, עובדDAO.getCountOfEmployees ()); }}

במבחן יחידה זה אנו מכריזים לראשונה על לעג JdbcTemplate חפץ עם @לִלְעוֹג ביאור. ואז אנחנו מזריקים את זה ל EmployeeDAO באמצעות אובייקט ReflectionTestUtils. כמו כן, אנו משתמשים ב- מוקיטו השירות ללעוג לתוצאת ההחזר של JdbcTemplate שאילתא. זה מאפשר לנו לבדוק את הפונקציונליות של ה- getCountOfEmployees שיטה מבלי להתחבר למסד נתונים.

אנו משתמשים בהתאמה מדויקת במחרוזת הצהרת SQL כאשר אנו לועגים ל- JdbcTemplate שאילתא. ביישומים בעולם האמיתי, אנו עשויים ליצור מחרוזות SQL מורכבות, וקשה לבצע התאמה מדויקת. לכן, אנו יכולים גם להשתמש ב- anyString () שיטה לעקוף את בדיקת המיתרים:

Mockito.when (jdbcTemplate.queryForObject (Mockito.anyString (), Mockito.eq (Integer.class))). ואז החזרה (3); assertEquals (3, עובדDAO.getCountOfEmployees ());

5. מגף אביב @JdbcTest

לבסוף, אם אנו משתמשים באביב אתחול, יש הערה בה אנו יכולים להשתמש בכדי לבצע אתחול בדיקה עם מסד נתונים H2 ו- JdbcTemplate אפונה: @JdbcTest.

בואו ליצור שיעור מבחן עם ההערה הזו:

@JdbcTest @ SQL ({"schema.sql", "test-data.sql"}) מחלקה עובדDAOIntegrationTest {@ אוטומטית JdbcTemplate jdbcTemplate פרטי; @Test בטל כאשרInjectInMemoryDataSource_thenReturnCorrectEmployeeCount () {EmployeeDAO עובדDAO = EmployeeDAO חדש (); עובדDAO.setJdbcTemplate (jdbcTemplate); assertEquals (4, עובדDAO.getCountOfEmployees ()); }}

אנו יכולים גם לציין את נוכחותו של ה- @Sql ביאור המאפשר לנו לציין את קבצי ה- SQL להפעלה לפני הבדיקה.

6. מסקנה

במדריך זה הראינו מספר דרכים לבדיקת יחידות JdbcTemplate.

כמו תמיד, קוד המקור של המאמר זמין באתר GitHub.


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