2016-07-07 15 views
7

Tôi đang cố vô hiệu quy tắc phân tích mã trên toàn bộ lớp, nhưng KHÔNG cho toàn bộ dự án, chỉ là một lớp duy nhất. Trong ví dụ bên dưới, bản dựng tạo ra cảnh báo CA1822 vì nó cho rằng các phương thức thử nghiệm đơn vị phải là tĩnh.Cách tắt Cảnh báo Phân tích Mã cụ thể cho toàn bộ lớp

Việc sửa chữa là để thêm thuộc tính sau cho mỗi phương pháp thử nghiệm đơn vị: [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]

Tuy nhiên, đó là cồng kềnh và clutters một lớp học với nhiều bài kiểm tra đơn vị.

Tôi đã thử:

  1. Di chuyển các thuộc tính cho lớp
  2. Bao bì tất cả các phương pháp trong

#pragma warning disable CA1822

#pragma warning restore CA1822

Cả hai phương pháp tiếp cận đã làm việc.

public class TestClass 
{ 
    public TestClass() 
    { 
     // some setup here 
    } 

    [Fact] 
    public void My_Unit_Test1() 
    { 
     // the 'this' parameter is never used, causes CA warning 1822 
    } 

    [Fact] 
    public void My_Unit_Test2() 
    { 
     // the 'this' parameter is never used, causes CA warning 1822 
    } 
} 

Sử dụng bản cập nhật VS2015 2, .net 4.61 và Bộ phân tích phân tích mã mới.

+0

Tôi đã giải quyết vấn đề này (và các vấn đề khác) bằng cách sử dụng một quy tắc Phân tích mã khác cho các dự án Thử nghiệm đơn vị. Tôi đã tắt các quy tắc không áp dụng cho các dự án Thử nghiệm Đơn vị. –

+0

@MatthewWatson - Tôi cũng sử dụng một quy tắc khác cho các dự án thử nghiệm. Trong trường hợp này, tôi muốn quy tắc áp dụng cho dự án thử nghiệm đơn vị của mình, không chỉ một lớp cụ thể. – SFun28

+0

Thật không may là bạn không thể làm điều này - sự đàn áp phải luôn áp dụng cho mức độ cảnh báo/lỗi được báo cáo, vì vậy nếu đó là một phương pháp, bạn chỉ có thể chặn cảnh báo cho phương thức đó. –

Trả lời

3

Đây không phải là chính xác những gì bạn muốn nhưng có thể kém ác hơn tình huống bạn có.

Bạn có thể nói phân tích mã để bỏ qua một lớp học đặc biệt với các thuộc tính như sau: "(chỉ quản lý) Suppress kết quả từ mã được tạo"

[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] 

Lưu ý rằng dự án của bạn cần phải có tùy chọn Visual Studio kiểm tra.

Trong khi gây phiền nhiễu, bạn vẫn có thể chọn chạy phân tích mã trên tệp nếu bạn tạm thời nhận xét thuộc tính.

+0

'ExcludeFromCodeCoverage' chỉ định rằng mã được phân bổ sẽ bị loại trừ khỏi ** thông tin về mức độ phù hợp của mã **; không phải từ phân tích mã.Xem tài liệu MSDN (https://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.excludefromcodecoverageattribute(v=vs.110).aspx) –

0

Nhấp chuột phải vào lỗi trong tab danh sách lỗi và bạn có thể chọn 'Trong nguồn' và 'Trong tệp loại bỏ'.

SuppressMessageAttibute sẽ được thêm vào mã nguồn (phương thức hoặc cấp lớp) nếu bạn chọn 'Trong nguồn'.

'[assembly: SUppressMessage' sẽ được thêm vào tệp GlobalSupressions.cs và bạn có thể định cấu hình 'Mục tiêu' của thuộc tính.

snapshot here

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