Có, ở đâu đó trong cơ sở mã của bạn, một dòng mã thực hiện hành động thực tế là kết nối với DB từ xa. Dòng mã này, 9 lần trong 10, gọi một phương thức "tích hợp" được cung cấp bởi các thư viện thời gian chạy dành riêng cho ngôn ngữ và môi trường của bạn. Như vậy, đó không phải là mã "của bạn" và vì vậy bạn không cần phải kiểm tra nó; cho các mục đích của kiểm tra đơn vị, bạn có thể tin tưởng rằng cuộc gọi phương thức này sẽ thực hiện chính xác. Những gì bạn có thể, và nên, vẫn kiểm tra trong bộ kiểm thử đơn vị của bạn là những thứ như đảm bảo các tham số sẽ được sử dụng cho cuộc gọi này là những gì bạn mong đợi, như đảm bảo chuỗi kết nối là chính xác, hoặc câu lệnh SQL hoặc tên thủ tục lưu trữ.
Đây là một trong những mục đích đằng sau hạn chế rằng các bài kiểm tra đơn vị không nên rời khỏi "hộp cát" thời gian chạy của chúng và phụ thuộc vào trạng thái bên ngoài. Nó thực sự khá thực tế; Mục đích của kiểm tra đơn vị là để xác minh rằng mã bạn đã viết (hoặc sắp viết, trong TDD) hành xử theo cách bạn nghĩ. Mã mà bạn không viết, chẳng hạn như thư viện bạn đang sử dụng để thực hiện các hoạt động cơ sở dữ liệu của mình, không nên là một phần trong phạm vi của bất kỳ bài kiểm tra đơn vị nào, vì lý do rất đơn giản là bạn không viết nó.
Trong bộ kiểm tra tích hợp của bạn , những hạn chế này được nới lỏng. Bây giờ bạn có thểkiểm tra thiết kế chạm vào cơ sở dữ liệu, để đảm bảo rằng mã bạn đã viết chơi độc đáo với mã bạn đã không làm. Tuy nhiên, hai bộ kiểm thử này nên được tách riêng, vì bộ kiểm thử đơn vị của bạn hiệu quả hơn khi chạy nhanh hơn (vì vậy bạn có thể nhanh chóng xác minh rằng tất cả các xác nhận được đưa ra bởi các nhà phát triển về mã của họ vẫn giữ) và gần như theo định nghĩa, kiểm tra tích hợp chậm hơn bởi các đơn đặt hàng cường độ vì sự phụ thuộc vào nguồn lực bên ngoài. Hãy để bộ xử lý xây dựng chạy bộ tích hợp đầy đủ của bạn cứ sau vài giờ, thực hiện các kiểm tra khóa tài nguyên bên ngoài, để các nhà phát triển không giẫm lên các ngón chân của nhau bằng cách chạy các thử nghiệm tương tự cục bộ này. Và nếu xây dựng phá vỡ, vì vậy những gì? Rất nhiều tầm quan trọng được đặt vào việc đảm bảo build-bot không bao giờ thất bại trong quá trình xây dựng hơn có lẽ nên có.
Bây giờ, mức độ nghiêm trọng của bạn có thể tuân thủ điều này phụ thuộc vào chiến lược chính xác của bạn để kết nối và truy vấn cơ sở dữ liệu. Trong nhiều trường hợp bạn phải sử dụng khung truy cập dữ liệu "xương sống", chẳng hạn như các đối tượng SqlConnection và SqlStatement của ADO.NET, toàn bộ phương thức được phát triển bởi bạn có thể bao gồm các lệnh gọi phương thức tích hợp và mã khác phụ thuộc vào việc có kết nối cơ sở dữ liệu, và do đó, điều tốt nhất bạn có thể làm trong tình huống này là chế nhạo toàn bộ chức năng và tin tưởng vào bộ kiểm thử tích hợp của bạn. Nó cũng phụ thuộc vào mức độ bạn sẵn sàng thiết kế các lớp của mình để cho phép các dòng mã cụ thể được thay thế cho mục đích thử nghiệm (chẳng hạn như đề xuất của Tobi về mẫu Phương thức mẫu, đây là một mẫu tốt vì nó cho phép "giả một phần"
Nếu mô hình lưu giữ dữ liệu của bạn dựa vào mã trong lớp dữ liệu của bạn (chẳng hạn như kích hoạt, procs được lưu trữ, v.v.) thì đơn giản là không có cách nào khác để thực thi mã mà bạn đang viết ngoài việc phát triển các thử nghiệm sống bên trong lớp dữ liệu hoặc vượt qua ranh giới giữa thời gian chạy ứng dụng của bạn và DBMS. Một người theo chủ nghĩa thuần túy sẽ nói rằng mô hình này, vì lý do này, sẽ được tránh để ủng hộ một cái gì đó như ORM. Tôi không nghĩ rằng tôi đã đi khá xa; ngay cả trong thời đại của các truy vấn tích hợp ngôn ngữ và các hoạt động kiên trì phụ thuộc vào miền được kiểm tra bởi trình biên dịch, tôi thấy giá trị trong việc khóa cơ sở dữ liệu xuống chỉ các hoạt động được hiển thị thông qua thủ tục được lưu trữ và tất nhiên các quy trình được lưu trữ đó phải được xác minh bằng cách sử dụng tự động xét nghiệm. Nhưng, các bài kiểm tra như vậy không phải là bài kiểm tra đơn vị . Họ đang hội nhập xét nghiệm.
Nếu bạn gặp vấn đề với sự khác biệt này, thì thường dựa trên mức độ quan trọng cao được đặt vào "phạm vi bảo hiểm mã" hoàn chỉnh hay còn gọi là "phạm vi kiểm tra đơn vị". Bạn muốn đảm bảo mọi dòng mã của bạn được bao phủ bởi một bài kiểm tra đơn vị. Một mục tiêu cao cả trên khuôn mặt của nó, nhưng tôi nói hogwash; tâm lý đó cho vay để chống lại các mô hình kéo dài vượt xa trường hợp cụ thể này, chẳng hạn như viết các bài kiểm tra khẳng định thực thi nhưng không thực hiệnma cua ban. Những loại kết thúc này chỉ vì mục đích số lượng bảo hiểm có hại hơn là thư giãn phạm vi bảo hiểm tối thiểu của bạn. Nếu bạn muốn đảm bảo rằng mọi dòng mã cơ sở của bạn được thực thi bằng một số thử nghiệm tự động, thì điều đó thật dễ dàng; khi tính toán số liệu bảo hiểm mã, bao gồm các bài kiểm tra tích hợp. Bạn thậm chí có thể tiến thêm một bước và cô lập các bài kiểm tra "Itino" đang tranh chấp này ("Chỉ tích hợp tên") và giữa bộ kiểm tra đơn vị của bạn và danh mục kiểm tra tích hợp phụ này (vẫn sẽ chạy nhanh một cách hợp lý) gần với phạm vi bảo hiểm đầy đủ.