Tôi đang lập trình bằng Java và các ứng dụng của tôi đang sử dụng rất nhiều DB. Do đó, điều quan trọng đối với tôi là có thể kiểm tra việc sử dụng DB của mình một cách dễ dàng.
Tất cả các bài kiểm tra DB là gì? Đối với tôi, họ nên cung cấp hai yêu cầu đơn giản:
- Xác minh cú pháp SQL.
- Quan trọng hơn, hãy kiểm tra xem dữ liệu có được chọn / cập nhật / chèn chính xác hay không, theo một tình huống nhất định.
Vậy thì, có vẻ như tất cả những gì tôi cần là một DB.
Nhưng thực ra, tôi không thích, vì có một số khó khăn khi sử dụng DB để kiểm tra:
- "Chỉ cần kiếm cho mình một DB thử nghiệm, nó có thể khó đến mức nào?" - Chà, ở nơi tôi làm việc, để có một DB thử nghiệm cá nhân là điều khá bất khả thi. Bạn phải sử dụng DB "công khai", có thể truy cập được cho tất cả mọi người.
- "Các bài kiểm tra này chắc chắn không nhanh ..." - Các bài kiểm tra DB có xu hướng chậm hơn các bài kiểm tra thông thường. Nó thực sự không lý tưởng để có các bài kiểm tra chậm.
- "Chương trình này nên xử lý mọi trường hợp!" - Nó trở nên hơi khó chịu và thậm chí không thể thử và mô phỏng từng trường hợp trong DB. Đối với mỗi trường hợp, một số lượng truy vấn chèn / cập nhật nhất định sẽ được thực hiện, điều này gây khó chịu và mất thời gian.
- "Chờ một chút, làm sao bạn biết có 542 hàng trong bảng đó?" - Một trong những nguyên tắc chính trong kiểm thử, là có thể kiểm tra chức năng theo một cách khác với mã được kiểm tra của bạn. Khi sử dụng DB, thường có một cách để thực hiện điều gì đó, do đó, bài kiểm tra hoàn toàn giống với mã lõi.
Vì vậy, bạn có thể nhận ra rằng tôi không thích DB khi nói đến các bài kiểm tra (tất nhiên tôi sẽ phải đạt được điều này trong một số thời điểm, nhưng tôi muốn đến đó sau khi kiểm tra, sau khi tôi tìm thấy hầu hết các lỗi khi sử dụng phần còn lại của các phương pháp thử nghiệm). Nhưng tôi đang tìm kiếm cái gì?
Tôi đang tìm cách để mô phỏng một DB, một DB giả, sử dụng hệ thống tệp hoặc chỉ bộ nhớ ảo. Tôi nghĩ rằng có thể có một công cụ / gói Java cho phép đơn giản tạo (sử dụng giao diện mã) một mô hình DB cho mỗi bài kiểm tra, với các bảng và hàng được mô phỏng, với xác minh SQL và với một giao diện mã để theo dõi trạng thái của nó (thay vì sử dụng SQL ).
Bạn có quen thuộc với loại công cụ này?
Chỉnh sửa: Cảm ơn vì câu trả lời! Mặc dù tôi đang yêu cầu một công cụ, bạn cũng đã cung cấp cho tôi một số mẹo liên quan đến vấn đề :) Tôi sẽ mất một chút thời gian để kiểm tra các đề nghị của bạn, vì vậy tôi không thể nói ngay bây giờ liệu câu trả lời của bạn có hài lòng không.
Dù sao, đây là một cái nhìn tốt hơn về những gì tôi đang tìm kiếm - Hãy tưởng tượng một lớp có tên DBMonitor, một trong những tính năng của nó là tìm số lượng hàng trong bảng. Đây là đoạn mã tưởng tượng về cách tôi muốn kiểm tra tính năng đó bằng JUnit:
public class TestDBMonitor extends TestCase {
@Override
public void setUp() throws Exception {
MockConnection connection = new MockConnection();
this.tableName = "table1";
MockTable table = new MockTable(tableName);
String columnName = "column1";
ColumnType columnType = ColumnType.NUMBER;
int columnSize = 50;
MockColumn column = new MockColumn(columnName, columnType, columnSize);
table.addColumn(column);
for (int i = 0; i < 20; i++) {
HashMap<MockColumn, Object> fields = new HashMap<MockColumn, Object>();
fields.put(column, i);
table.addRow(fields);
}
this.connection = connection;
}
@Test
public void testGatherStatistics() throws Exception {
DBMonitor monitor = new DBMonitor(connection);
monitor.gatherStatistics();
assertEquals(((MockConnection) connection).getNumberOfRows(tableName),
monitor.getNumberOfRows(tableName));
}
String tableName;
Connection connection;
}
Tôi hy vọng mã này đủ rõ ràng để hiểu ý tưởng của tôi (xin lỗi vì lỗi cú pháp, tôi đã nhập thủ công mà không có Eclipse thân yêu của tôi: P).
Nhân tiện, tôi sử dụng ORM một phần và các truy vấn SQL thô của tôi khá đơn giản và không nên khác biệt giữa nền tảng này với nền tảng khác.