Các lập trình viên trong nhóm của tôi đôi khi mở một giao dịch và quên bao gồm câu lệnh scope.Complete() (xem khối mã bên dưới). Bất kỳ ý tưởng về cách để một trong haiC# - Làm cách nào để kiểm tra các câu lệnh scope.Complete() bị thiếu?
(1) tìm kiếm giải pháp của chúng tôi cho thiếu scope.Complete() tuyên bố, hoặc
(2) có Visual Studio tự động làm nổi bật hoặc nâng cao một cảnh báo cho thiếu scope.Complete() báo cáo ?
Đây là dòng chúng tôi bỏ lỡ:
using(TransactionScope scope = new TransactionScope())
{
/* Perform transactional work here */
scope.Complete(); <-- we forget this line
/* Optionally, include a return statement */
}
Những gì tôi đã cố gắng
Tôi đã cố gắng sử dụng một mẫu ReSharper Tuỳ chỉnh cho mục đích này, không có may mắn. Lý tưởng nhất là tôi sẽ tìm kiếm một cái gì đó như:
using(TransactionScope scope = new TransactionScope())
{
$statements1$
[^(scope.Complete();)]
$statements2$
}
Tuy nhiên, ReSharper chỉ chấp nhận biểu thức thông thường để định danh, không cho phát biểu, vì vậy đây không xuất hiện để làm việc (http://www.jetbrains.com/resharper/webhelp/Reference__Search_with_Pattern.html).
Bất kỳ ý tưởng nào? Tôi cũng đang mở để sử dụng các plugin hoặc công cụ khác.
Cảm ơn,
Bến
Họ không kiểm tra mã của họ? – Magnus
Tôi đã nhìn thấy điều này trước khi thực hiện kiểm tra. Qua phản xạ, bạn có thể xác định xem một phương thức có được gọi trên một cá thể hay không. Nếu không thì thử nghiệm sẽ thất bại. –
Tôi nghĩ với NDepend bạn có thể thiết lập một quy tắc để tìm kiếm các phương thức mà số lượng tập quán ctor 'TransactionScope' ít hơn số lượng' Hoàn thành' tập quán. – AakashM