2010-06-24 45 views
11

Ưu điểm của việc sử dụng đối tượng giả so với cơ sở dữ liệu thử nghiệm tĩnh đã biết dữ liệu và sử dụng giao dịch để đảm bảo không có gì thay đổi khi thử nghiệm đối với cơ sở dữ liệu.Đối tượng giả vs Cơ sở dữ liệu thử nghiệm

+1

Người ta có thể phản đối việc kiểm tra cơ sở dữ liệu không phải là một phần của bài kiểm tra đơn vị – mathk

+0

@mathk Nếu anh ta có logic trong các thủ tục được lưu trữ thì sao? – aehiilrs

+0

@aehiilrs Sau đó thử nghiệm với cả hai đối tượng và cơ sở dữ liệu là _still_ một thử nghiệm tích hợp, không phải là một thử nghiệm đơn vị. Nhưng cả hai đều là các thử nghiệm tự động bất kể và cả hai có thể được thúc đẩy bằng một khung kiểm thử đơn vị. Bây giờ câu hỏi của tôi là, nếu bạn viết các bài kiểm tra trong sql chạy trên cơ sở dữ liệu để kiểm tra các procs được lưu trữ trên cơ sở dữ liệu (trên cùng một máy chủ), đó là kiểm thử đơn vị hay kiểm thử tích hợp? – apollodude217

Trả lời

12

Bạn có thể làm cả hai. Sử dụng các đối tượng giả để kiểm tra bạn BLL logic và sau đó sử dụng một cơ sở dữ liệu thử nghiệm để kiểm tra logic DAL của bạn. Bằng cách đó, nếu một cái gì đó phá vỡ bạn có thể dễ dàng nhìn thấy nơi mà vấn đề nằm trong đó kiểm tra thất bại.

+4

từ ngữ: Tôi giả sử "logic BLL" sẽ mở ra thành "Logic lớp logic nghiệp vụ". Nó có vẻ như thêm "logic" là dư thừa. Ngoài ra, cùng với "Lớp Truy cập Dữ liệu", các ứng dụng này được sử dụng phổ biến trong các sản phẩm của Microsoft, do đó, sẽ có ý nghĩa khi sử dụng các thuật ngữ phổ biến thay vào đó, khi trả lời câu hỏi độc lập này của Microsoft. – n611x007

2

Nếu bạn có thể đảm bảo rằng db thử nghiệm tĩnh không thay đổi trong khi thử nghiệm thì tôi nghĩ db thử nghiệm tĩnh là tốt hơn so với đối tượng giả. Nhưng, sau đó nó phụ thuộc vào những gì bạn muốn kiểm tra và sự phức tạp của mã đang được thử nghiệm. Tôi sẽ đi với các đối tượng giả khi chúng được đơn giản hơn để duy trì so với một db.

6

Thứ nhất, sử dụng mô hình sẽ nhanh hơn nhiều so với kết nối với cơ sở dữ liệu bên ngoài. Tuy nhiên, lý do chính là mocks hoạt động giống nhau mỗi khi chạy thử nghiệm, mà bạn không thể bảo đảm với một dịch vụ bên ngoài như một cơ sở dữ liệu, có nghĩa là các kiểm thử đơn vị không bị hỏng một cách ngẫu nhiên. Bạn cũng có thể dễ dàng mô phỏng bất kỳ loại lỗi nào bạn muốn xử lý với đối tượng giả.

Bạn cũng nên chạy thử nghiệm tích hợp với cơ sở dữ liệu thực để kiểm tra những thứ như cấu hình và hiệu suất.

1

Thông thường bạn sẽ sử dụng cả hai phương pháp này.

Đối với các bài kiểm tra đơn vị, bạn sẽ sử dụng các đối tượng giả. Bằng cách này bạn có thể kiểm tra hệ thống của mình theo cách chi tiết hơn, bởi vì bạn có thể thử mọi đối tượng - không chỉ các đối tượng quấn kết nối cơ sở dữ liệu. Nói chung nó là thực hành tốt để đơn vị kiểm tra tất cả các lớp trong tách của tất cả các phụ thuộc. Lợi ích là - nó có thể kiểm tra tất cả các lỗi xử lý trên tất cả các cấp và chắc chắn rằng bạn kiểm tra tất cả các đường dẫn mã, khi bạn nhận được một thử nghiệm thất bại, bạn có thể ngay lập tức tìm ra nguyên nhân, vv. kiểm tra đầu cuối bạn kiểm tra các phần lớn của hệ thống hoặc toàn bộ điều. Sau đó, bạn sẽ kết nối với cơ sở dữ liệu (vì kết nối này là một phần của thử nghiệm). Rõ ràng bạn phải đảm bảo rằng cơ sở dữ liệu ở trạng thái đã biết, v.v.

Bạn sẽ có nhiều bài kiểm tra đơn vị hơn kiểm tra tích hợp, vì vậy thực sự khá quan trọng để làm cho chúng rất nhanh sử dụng các đối tượng giả.

1

Hãy tưởng tượng bạn sắp viết một lớp không tồn tại. Có lẽ đó là một bộ điều khiển. Nó không phải là một cái gì đó mà nói thẳng vào cơ sở dữ liệu.

Bạn có ý tưởng tốt về cách thức hoạt động, và bạn biết cần phải chịu trách nhiệm gì, và những gì cần ủy quyền cho một số dịch vụ khác (sử dụng Nguyên tắc chịu trách nhiệm một lần). Vì vậy, bạn viết giao diện để đại diện cho vai trò của các lớp trợ giúp nó sẽ sử dụng.

Sau đó, bạn viết một ví dụ về cách bạn có thể sử dụng lớp học mà bạn sắp tạo. Nếu bạn thích, bạn có thể gọi ví dụ một bài kiểm tra đơn vị. Bạn giả lập các tương tác với các lớp trợ giúp. Khi bạn chạy ví dụ, nó không thành công, vì bạn chưa viết mã. Bây giờ bạn có thể viết mã để làm cho nó vượt qua, bằng cách sử dụng các giao diện của các lớp trợ giúp - mà bạn cũng chưa viết.

Sau đó, bạn làm tương tự với các lớp trợ giúp, chế nhạo người trợ giúp của họ.

Cuối cùng bạn sẽ đến lớp học nói chuyện với cơ sở dữ liệu. Hoặc có thể nó nói chuyện với một dịch vụ web. Hoặc có lẽ dữ liệu là tĩnh hoặc trong bộ nhớ.(Nó không quan trọng với lớp học ban đầu, bởi vì lớp học của bạn được tách rời khỏi điều này).

Tại thời điểm này, bạn sẽ muốn có ví dụ để mô tả hành vi của lớp này, và nếu đó là trình kết nối cơ sở dữ liệu, bạn sẽ cần một cơ sở dữ liệu cho ví dụ.

Viết mã theo cách này tạo mã dễ sử dụng và dễ hiểu, không cần thêm gì ngoài việc thêm thứ gì đó lên ngăn xếp. Điều này thường mạnh hơn mã dễ viết hơn. Đó là lý do tại sao đôi khi chúng tôi sử dụng mocks - bởi vì việc viết các bài kiểm tra đầu tiên bằng cách sử dụng mocks giúp tạo ra thiết kế tốt, có thể duy trì, được tách riêng.

1

Thiết lập để thử nghiệm với db có thể khó khăn. Nếu bạn thấy mình dành nhiều thời gian hơn trong việc thiết lập db, chỉ để kiểm tra một số khía cạnh chức năng của logic nghiệp vụ của bạn, thì bạn có thể muốn sử dụng một giả/giả.

Các vấn đề liên quan