2010-03-24 20 views
6

Tôi chỉ vừa mới hoàn thành cuốn sách Michael Feathers' Working Effectively with Legacy Code. Đó là một cuốn sách tuyệt vời về cách tạo các đường nối thử nghiệm một cách hiệu quả và khai thác chúng để lấy mã hiện có đang được thử nghiệm.Liên kết vỉa trong .NET

Một trong những kỹ thuật, ông nói về đã sử dụng "vỉa liên kết". Về cơ bản, ý tưởng là nếu bạn có mã tùy thuộc vào thư viện khác, bạn có thể sử dụng trình liên kết để chèn một thư viện khác để thử nghiệm hơn là cho sản xuất. Điều này sẽ cho phép bạn cảm nhận điều kiện kiểm tra thông qua thư viện giả hoặc tránh gọi vào thư viện có hiệu ứng thế giới thực (cơ sở dữ liệu, email, v.v.), v.v.

Ví dụ mà anh đưa ra là trong C++. Tôi tò mò nếu kỹ thuật này (hoặc một cái gì đó tương tự) có thể trong NET/C#?

+1

Lưu ý rằng đây phải là phương sách cuối cùng khi mọi thứ khác không thành công. Nếu nó bị lạm dụng, sau một thời điểm nào đó bạn có thể mất dấu vết của thư viện bạn đang sử dụng ở đâu, và điều này có thể dẫn đến các lỗi tinh vi cả trong các bài kiểm tra và trong sản xuất. –

+0

Ồ tôi hoàn toàn đồng ý. Và TBH Tôi không chắc mình sẽ sử dụng nó bao giờ hết. Tôi chỉ tò mò hơn nếu nó thậm chí có thể trên stack .NET. – RationalGeek

Trả lời

4

Có nó là có thể trong Net. Trong trường hợp đơn giản nhất, bạn

Với một hội đồng được đặt tên mạnh, bạn nên thay đổi số phiên bản và sau đó cấu hình các ràng buộc lắp ráp để ghi đè lên phiên bản biên dịch "liên kết". Điều này có thể được thực hiện trên một cấp doanh nghiệp, máy, người dùng hoặc thư mục.

Có một số cảnh báo, liên quan đến bảo mật. Nếu lắp ráp bạn muốn thay thế đã được đặt tên mạnh, sau đó bạn sẽ cần phải tạo lại cùng một khóa công khai trong việc ký kết hội đồng.

Nói cách khác, nếu bạn là nhà phát triển ứng dụng không muốn thư viện của bạn "giả mạo" (hoặc có thể được thay thế bằng mã độc) thì bạn phải đảm bảo rằng hội đồng được ký và khóa riêng tư không được cung cấp công khai.

Đó là lý do tại sao bạn không thể giả lập DateTime - bởi vì Microsoft đã mạnh mẽ đặt tên cho các thư viện lõi của .Net.