2010-04-26 21 views
10

Tôi yêu thế giới mới là C#, tôi đã đi đến một điểm với các chương trình đồ chơi của mình, nơi tôi muốn bắt đầu viết một số bài kiểm tra đơn vị.C# Unit Testing - Tạo các dữ liệu MockContext/LINQ -> Các lớp SQL

Mã của tôi hiện đang sử dụng cơ sở dữ liệu qua đối tượng DatabaseDataContext (* .dbml), cách tốt nhất để tạo mô hình cho đối tượng này là gì? Với cách dễ dàng để tạo ra cơ sở dữ liệu LINQ -> mã SQL và mức độ phổ biến của yêu cầu này, tôi hy vọng VS2010 đã xây dựng chức năng để giúp kiểm tra.

Nếu tôi đang đi và điều này phải được thực hiện bằng tay, bạn có thể vui lòng khai sáng cho tôi theo cách tiếp cận ưa thích của bạn không?

Nhiều Cảm ơn,

Gavin

+0

Nhìn vào câu trả lời này để xem cách kiểm tra hiệu quả và thành công với LINQ to SQL: http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work-functionality-from-repositories- Sử dụng-ioc/4132186 # 4132186 – Steven

Trả lời

5

Vấn đề với DataContext là nó không được thiết kế để mô phỏng.

Công cụ miễn phí để chế nhạo không thể bỏ qua là Moles from Pex (Pex moles?). Nó tương đương với TypeMock.

3

Cách tốt nhất tôi biết là để trích xuất giao diện của đối tượng này và sử dụng để tạo ra các đối tượng giả, vì vậy nó thực sự sẽ không quan trọng nếu bạn sử dụng linqtosql hoặc EF để nói chuyện với cơ sở dữ liệu, hoặc nếu bạn nói chuyện với bất kỳ cơ sở dữ liệu nào cả.

+3

Ngoại trừ việc bạn không thể chuyển đổi việc triển khai L2S cho EF, vì cả hai đều tạo ra các mô hình không tương thích với nhau. Rối loạn trừu tượng bị rò rỉ. – Will

+1

@Will - điểm tốt. –

0

vài điều mà có thể có ích cho bạn:

Moq (phát âm là "Mock-you" hay chỉ "Mock") là thư viện chỉ chế giễu cho .NET phát triển từ đầu đến tận dụng tối đa .NET 3.5 (tức là cây biểu thức LINQ) và C# 3.0 đối tượng địa lý (ví dụ: biểu thức lambda) làm cho nó trở nên hiệu quả nhất, loại an toàn và tái cấu trúc dễ dàng thư viện nhại sẵn có. Và nó hỗ trợ giao diện giả mạo cũng như các lớp . API của nó cực kỳ đơn giản và đơn giản, và không yêu cầu bất kỳ kiến ​​thức nào trước hoặc trải nghiệm với các khái niệm mô phỏng.

LINQPad cho phép bạn tương tác truy vấn cơ sở dữ liệu bằng một ngôn ngữ truy vấn hiện đại: LINQ. Hôn tạm biệt Quản lý SQL Studio!

LINQPad hỗ trợ tất cả mọi thứ trong C# 3.0 và Framework 3.5, và nhiều hơn nữa:

LINQ to Objects LINQ to SQL và Entity Khung LINQ to XML WCF liệu Dịch vụ & SQL Azure LINQ to SQLite và MySQL Enterprise Server Mindscape Tốc độ ánh sáng ORM (Ngay cả kiểu cũ SQL!)

1

[Disclaimer: Tôi làm việc tại Typemock]

Bạn có thể sử dụng Typemock Isolator để tạo ra một đối tượng giả mạo và đặt nó là phương pháp để trả lại những gì bạn cần:

var fakeContext = Isolate.Fake.Instance<DatabaseDataContext>(); 

Hãy xem tại bài đăng trên blog này về cách giả mạo Linq2Sql: Faking LINQ to SQL DataContext Tables with Isolator

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