9

Có một sản phẩm/dự án cho phép bạn xác định các quy ước để nói một dự án MVC để kiểm tra tĩnh cho các quy ước đặt tên như Controller được nối vào cuối các lớp kế thừa từ bộ điều khiển và/hoặc thực thi chữ ký phương thức nhất định khi trang trí một phương thức có thuộc tính. Tôi về cơ bản đang tìm cách thiết lập một số đường ray bảo vệ cho các nhà phát triển mới đến với nhóm của chúng tôi, nơi chúng tôi có một tập hợp rõ ràng các quy ước được sử dụng để kết nối mọi thứ một cách linh động thông qua sự phản chiếu. Thấy rằng dây phản xạ này sẽ thất bại vì chữ ký không tương thích sẽ là một lợi ích rất lớn cho quá trình tăng tốc của chúng tôi.Kiểm tra tĩnh cho các quy ước khung

Các tính năng chính cần thiết:

  • tĩnh/Compile thời gian kiểm tra các quy tắc vỡ
  • Khả năng nhắm mục tiêu các phương pháp trang trí với các thuộc tính cụ thể (thông qua RegEx hoặc một Wizard)
  • bộ khác nhau của quy tắc dựa trên khác nhau các loại dự án. (ví dụ: Một tập hợp các quy ước cho một Ứng dụng MVC, một tập hợp khác cho Ứng dụng Biểu mẫu Web và một tập hợp khác cho Thư viện Lớp được gắn với .BLL)

Bất kỳ đề xuất đầu vào nào được đánh giá cao mặc dù tôi yêu cầu bạn chỉ trả lời nếu bạn biết rằng các tính năng này được hỗ trợ.

+0

bạn có thử FxCop/Phân tích mã không? – BrokenGlass

Trả lời

4

Trải nghiệm cá nhân tại đây, nhưng tôi luôn viết các bài kiểm tra cho những thứ như thế này. Tôi phân tích thông qua các hội đồng của mình và đảm bảo rằng mọi thứ đều theo các quy ước. Đối với một vài ví dụ cụ thể, tôi kiểm tra các đối tượng yêu cầu/phản hồi WCF để đảm bảo rằng chúng không gửi "DTO" qua dây và tất cả chúng đều nằm trong một không gian tên XML nhất quán.

Dưới đây là một ví dụ nhanh chóng mà đảm bảo rằng tất cả các phương pháp dịch vụ trở lại một cái gì đó mà được thừa hưởng một đối tượng BaseResponse:

[Test] 
public void All_IMyService_methods_should_return_a_BaseResponse() 
{ 
    var methods = typeof (IMyService).GetMethods(); 
    foreach (var methodInfo in methods) 
     Assert.That(typeof (BaseResponse).IsAssignableFrom(methodInfo.ReturnType), "Service Method " + methodInfo.Name + " does not return a BaseResponse"); 
} 

tôi chắc chắn rằng ai đó sẽ có một cái gì đó tốt hơn/tự động hơn, nhưng điều này đã làm việc cho tôi.

+0

đây là một cách tiếp cận thực sự thú vị, tôi sẽ cung cấp cho nó một shot để xem nếu nó sẽ bao gồm các trường hợp sử dụng tôi đang quan tâm với cuối tuần này. – Gent

+1

Tôi thích nó. Nó linh hoạt như bạn sẽ nhận được. Nó chỉ bị giới hạn bởi sự linh hoạt của sự phản chiếu. Đó là, để nói, có thể bạn sẽ không chạy vào một cái gì đó mà không thể được kiểm tra. –

+0

cảm ơn tôi đã có thể bao gồm tất cả các trường hợp của tôi thông qua sự phản ánh! – Gent

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