2011-12-28 8 views
5

Tôi thậm chí không chắc chắn nếu có một tiện ích cho phép điều này, nhưng nó có vẻ giống như một nhu cầu phổ biến?Tạo các đối tượng kho lưu trữ giả lập một cách nhanh chóng bằng cách sử dụng dữ liệu trực tiếp? Moq

Có một chương trình/thư viện/thành phần sẽ tạo ra các đối tượng .NET giả lập (kho lưu trữ) sẽ tạo ra một số dữ liệu giả định như một số cuộc gọi cơ sở dữ liệu nhất định.

Cho phép tôi xây dựng: Nếu tôi thử nghiệm kho lưu trữ (không phải kiểm tra đơn vị, chỉ cần thử nghiệm trong cửa sổ bảng điều khiển) và khi tôi chuyển tiêu chí lựa chọn vào kho lưu trữ của mình, nó sẽ trả về danh sách đối tượng. Tôi sẽ/tình yêu/cho một khả năng để nắm bắt danh sách các đối tượng và chuyển đổi nó thành mã C# thiết lập tĩnh sẽ phục vụ như là một thiết lập cho một bài kiểm tra đơn vị. Đối tượng của tôi khá phức tạp và mất nhiều thời gian để cài đặt chúng đúng cách.

Điều này có khả thi không? Nhóm của tôi đang sử dụng Moq & Ninject

Trả lời

1

Có thể là một nỗi đau khi viết chúng bằng tay nhưng bạn chỉ cần thực hiện nó ngay lập tức. Sau đó, đối với mỗi bài kiểm tra liên tiếp, bạn có thể sửa đổi các đầu vào. Tôi không biết dù sao để tiết kiệm hoặc nắm bắt các đối tượng của bạn trong thời gian chạy. Tôi tìm thấy một trang web mà nói về automocking nó CÓ THỂ làm những gì bạn đang sau. http://code.google.com/p/moq-contrib/wiki/Automocking

Chúc mừng, Andrew

1

Có một vài cách tốt để đối phó với nhu cầu này.

Trước tiên, bạn có thể kiểm tra lại lý do tại sao bạn muốn thực hiện việc này. Nếu bạn cần phải có một đối tượng phức tạp được cấu hình đầy đủ để chạy thử nghiệm đơn vị của bạn, có thể bạn đang cố thử nghiệm quá nhiều. Thiết lập phức tạp là một mùi thử nghiệm, và có thể (hoặc có thể không) chỉ ra rằng bạn nên thực hiện một thay đổi thiết kế.

Đôi khi không thể thực hiện loại thay đổi đó, và đôi khi mùi kiểm tra đó không thực sự cho thấy sự thay đổi thiết kế. Trong những trường hợp đó, đặt cược tốt nhất của bạn là sắp xếp các đối tượng (khi bạn nói "chuyển đổi nó thành mã C# thiết lập tĩnh", có thể được đặt lại thành "serialize nó như hướng dẫn C# để tạo lại"). Có rất nhiều cách tương đối đơn giản để tuần tự hóa thành xml, tôi khuyên bạn nên DataContract hoặc XmlSerialization, chúng rất dễ thực hiện và sử dụng.