2009-02-27 41 views
13

Tôi coi bản thân mình vẫn còn khá mới đối với cảnh TDD. Nhưng thấy rằng không có vấn đề mà phương pháp tôi sử dụng (khuôn mẫu giả hoặc stubbing đối tượng của riêng tôi) Tôi thấy rằng tôi phải viết rất nhiều mã để tạo ra dữ liệu giả. Tôi thích ý tưởng tải lên các đối tượng để tạo ra một cơ sở dữ liệu trong bộ nhớ. Nhưng những gì tôi không thích là làm lộn xộn các bài kiểm tra của tôi với một tấn mã cho mục đích duy nhất là tạo dữ liệu giả. Đây là trường hợp đặc biệt khi dữ liệu cần tính đến tất cả các trường hợp khác nhau.Tạo dữ liệu giả cho thử nghiệm đơn vị

Tôi muốn một số đề xuất để có cách làm tốt hơn. Dường như với tôi rằng tôi có thể tải dữ liệu một lần vào trạng thái đã biết từ một số kho dữ liệu và sau đó tôi có thể sử dụng ảnh chụp nhanh trạng thái đó được tải trong thiết lập thử nghiệm/khởi tạo trước mỗi phương pháp thử nghiệm được thực hiện. Điều này sẽ đáp ứng các thực hành thử nghiệm thích hợp trong khi cung cấp sự tiện lợi và cho phép tôi tập trung vào viết các bài kiểm tra thay vì viết mã để tạo dữ liệu thử nghiệm "bằng tay".

Trả lời

6

Có thể bạn có thể thử thư viện NBuilder. Nó cung cấp một giao diện rất thông thạo và dễ sử dụng. Bạn có thể sử dụng nó để tạo ra các cá thể đơn của một lớp với các giá trị defualt hoặc tạo các danh sách với các giá trị mặc định hoặc được ghi đè lên. Bạn có thể xem this một.

+0

Đẹp, đây chỉ là những gì tôi đang tìm kiếm. Tôi đã từ bỏ vì tôi đã không tìm thấy bất cứ điều gì tôi thực sự thích. Điều này là tốt đẹp khi các giá trị dữ liệu không quan trọng như vậy miễn là chúng phù hợp với các giá trị ban đầu được tạo ra. –

0

Tôi biết chính xác ý bạn là gì. Tôi nghĩ rằng một cách tiếp cận tốt để giải quyết vấn đề này là thực sự có một dự án MockFramework riêng biệt chứa tất cả dữ liệu giả của bạn, bên ngoài dự án thử nghiệm. Bằng cách này bạn có thể tạo dữ liệu giả một cách riêng biệt, lưu trữ nó trong bộ nhớ nếu bạn muốn, hay không, và sau đó tham khảo khung giả từ dự án thử nghiệm. Nếu bạn sử dụng khung bên thứ ba để làm điều này, tất cả tốt hơn, nhưng bạn vẫn có thể bao bọc khung bên thứ ba đó trong khuôn khổ giả của riêng bạn để bạn có thể nhận được tất cả "keo" tạo dữ liệu giả theo cách bạn cần các bài kiểm tra của bạn để các bài kiểm tra có thể thực sự chỉ là những gì họ cần.

+0

Điều này giải quyết được vấn đề lộn xộn, nhưng tôi vẫn cần giả lập tất cả dữ liệu, chỉ trong một dự án riêng biệt. Có lẽ, như bạn đã đề xuất, tôi có thể sử dụng khung bên thứ ba để tải lên dữ liệu và dịch nó sang mô hình đối tượng của tôi. nDbUnit có thể hoạt động, theo đề xuất của webjedi. –

1

Bạn có thể có các lớp Builder giúp bạn xây dựng các trường hợp bạn cần/trong trường hợp này, những trường hợp bạn sẽ sử dụng liên quan đến kho lưu trữ. Yêu cầu Trình tạo sử dụng các giá trị mặc định thích hợp và trên các thử nghiệm của bạn, bạn có thể ghi đè những gì bạn cần. Điều này giúp bạn tránh phải đặt mọi trường hợp "dữ liệu" được trộn lẫn cho tất cả các bài kiểm tra khác nhau (điều này giới thiệu các vấn đề, vì thường có những trường hợp không tương thích với các bài kiểm tra khác nhau).

** Cập nhật 1: ** Hãy xem www.markhneedham.com/blog/2009/01/21/c-builder-pattern-still-useful-for-test-data

+0

Cảm ơn bạn đã liên kết, điều đó đã giúp tôi hiểu rõ hơn ý của bạn. Điều này vẫn yêu cầu tôi viết các đối tượng bằng tay, chỉ khác nhau. Tuy nhiên, bạn làm cho một điểm tốt về việc không đưa tất cả các trường hợp duy nhất vào "dữ liệu". –

+0

Lưu ý rằng điểm có mặc định, là cho phép bạn có cấu hình/dữ liệu được chia sẻ đó, nhưng không bị mất tất cả các trường hợp cụ thể. – eglasius

1

Nếu bạn đang sử dụng Net Hãy thử NDBUnit

Bạn cư cửa hàng của bạn và sau đó nó reverts DB của bạn đến một nhà nước được biết đến vào thời điểm kiểm tra, cho mỗi bài kiểm tra. Loạt phim truyền hình màn hình Autumn of Agile hiển thị chi tiết này khá tốt.

Hoặc bạn có thể thực hiện việc này theo cách thủ công ... tạo thủ tục được lưu trữ hoặc bất kỳ thứ gì để cắt bớt các bảng của bạn và sao chép dữ liệu trong phương pháp teardown của bạn.

+0

Điều đó sẽ chỉ hoạt động đối với các thử nghiệm tích hợp. – eglasius

+0

Freddy Rios đúng về bình luận thứ 2 của bạn. nDbUnit đã đóng, nhưng tôi dường như không tìm thấy bất kỳ tài liệu nào. Tôi đã tải xuống mẫu mã từ Autumn of Agile và có vẻ như tôi cần một xsd và tôi đã sử dụng Entity Framework vì vậy tôi phải sao chép mọi thứ từ xsd sang EF. –

+0

XSD chỉ nhằm mục đích loại bỏ dữ liệu hiện tại thành một tệp xml và sau đó đọc nó trở lại sau khi thử nghiệm được thực hiện. @Freddy Dunno về điều đó ... Tôi đang làm điều đó từ bước một ... sẽ không xem xét rằng một thử nghiệm tích hợp cho mỗi se. – Webjedi

0

Cảm ơn tất cả các đề xuất, tôi nghĩ giải pháp đòi hỏi một chút về mọi thứ. Tôi không muốn các xét nghiệm này kết thúc là kiểm tra hồi quy, nhưng w/o một số loại dữ liệu hiện có lưu trữ mọi thứ vẫn còn sôi xuống để tạo ra dữ liệu bằng cách "xây dựng các đối tượng" theo cách thủ công. Điều gì sẽ thực sự tốt đẹp sẽ là một khuôn khổ cho phép tôi sử dụng DAL hiện tại của tôi để viết mã dữ liệu để viết mã cho tôi hoặc lấy dữ liệu trong bộ nhớ và truy cập dữ liệu như trong cơ sở dữ liệu bộ nhớ.

0

Untils.org bao gồm cách này tốt hơn bao giờ hết.

Toàn bộ hướng dẫn của họ thực sự rất tốt.

Nhưng về cơ bản, nếu đơn vị của bạn yêu cầu "nhiều dữ liệu" thì chúng có thể không phải là các bài kiểm tra đơn vị nữa. Tôi khuyên bạn nên thử kiểm tra từng phần nhỏ hơn.

+0

Liên kết đến Untils.org không hoạt động. – Torleif

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