2015-05-29 27 views
5

Tôi sử dụng Sonarqube 5.1 và thử nghiệm với hồ sơ chất lượng Java “Sonar”. Công việc rất đơn giản: tôi muốn xác định một toàn cầu Chuỗi liên tục cho một loại phương tiện truyền thông còn thiếu:Cách Sonar để xác định hằng số

public interface Utf8MediaType { 
    String APPLICATION_JSON = "application/json;charset=UTF-8"; 
} 

Tuy nhiên, Sonarqube nói với tôi đây là thói quen xấu trong quy tắc mực: S1214 - Các hằng số nên không được quy định tại giao diện. Các cuộc đàm phán văn bản dài về việc thực hiện giao diện này, mà tôi không có ý định, nhưng tôi kiên cường thi tạo ra một lớp thay vì:

public class Utf8MediaType { 
    public static final String APPLICATION_JSON = "application/json;charset=UTF-8"; 
} 

Tuy nhiên, đây được coi là một vấn đề thiết kế chủ yếu trong quy tắc mực: S1118 - Các lớp tiện ích không được có các nhà thầu công khai. Vì vậy, nó thúc giục tôi thêm một nhà xây dựng tư nhân. Tất nhiên, nhà xây dựng này sau đó sẽ đến trước không vi phạm các quy ước trong quy tắc mực: S1213 - Các thành viên của một khai báo giao diện hoặc lớp sẽ xuất hiện theo thứ tự được xác định trước. Tôi đoán sau đó tôi thậm chí có thể nhận được common-java: InsufficientBranchCoverage vì hàm tạo riêng tư không được đề cập trong các thử nghiệm.


Đây là các quy tắc mặc định và tôi cảm thấy chúng có chút ngớ ngẩn khi kết hợp. Tôi có nhiều ví dụ hơn về các giá trị mặc định không hoạt động cho chúng tôi (hỗ trợ TestNG thiếu). Tôi có thể làm gì với nó? Bạn đề xuất món gì?

  • Cung cấp cho nó một lớp, thêm một hàm tạo riêng, sử dụng nội tâm trong bài kiểm tra đơn vị. Làm cho mã mười lần lớn. Đối với hằng số Chuỗi.
  • Tạo danh sách ngoại lệ. Nhưng làm điều này cho từng dự án có thể dẫn đến danh sách dài và mời mọi người thêm ngoại lệ ngay cả đối với những nội dung quan trọng.
  • Tắt quy tắc. Bây giờ tôi thích không phải để giả mạo với các cấu hình mặc định, bởi vì điều đó có thể có nghĩa là rất nhiều công việc về nâng cấp Sonarqube.
  • Tạo cấu hình kế thừa từ mặc định và ghi đè mọi thứ. Hóa ra là khi bạn kế thừa từ tiểu sử, bạn không thể hủy kích hoạt các quy tắc. Bạn chỉ có thể thêm các quy tắc bổ sung và thay đổi cấu hình của các quy tắc (để giảm mức độ nghiêm trọng của chúng).
+1

"bạn không thể hủy kích hoạt quy tắc" <- bạn có chắc chắn về điều đó không? – fge

+0

Vâng, @fge, nếu tôi biết cách thực hiện, tôi sẽ làm điều đó. Đó sẽ là sở thích cá nhân của tôi. –

+0

Đăng nhập với tư cách quản trị viên, nhấp vào tab Quy tắc, chọn cấu hình bạn sử dụng, tìm quy tắc và nhấp vào nút "hủy kích hoạt" ... – Jack

Trả lời

1

Tặng cho nó một lớp, thêm một hàm tạo riêng, sử dụng nội tâm trong bài kiểm tra đơn vị. Làm cho mã mười lần lớn. Đối với hằng số Chuỗi.

Đây là cách tiếp cận chính xác nói chung. Bạn thực sự không muốn tạo giao diện "Constants". Các nhà xây dựng tư nhân là cần thiết để đảm bảo rằng người dùng không vô tình mở rộng hoặc nhanh chóng một đối tượng mà không nên được instantiated.

How to add test coverage to a private constructor?

Tạo một danh sách các trường hợp ngoại lệ. Nhưng làm điều này cho từng dự án có thể dẫn đến danh sách dài và mời mọi người thêm ngoại lệ ngay cả đối với những nội dung quan trọng.

Quá nhiều việc.

Tắt quy tắc. Bây giờ tôi không muốn giả mạo với các profile mặc định, bởi vì điều đó có thể có nghĩa là rất nhiều công việc về nâng cấp Sonarqube.

Như bạn đã nói ... ý tưởng tồi.

Tạo tiểu sử kế thừa từ mặc định và ghi đè mọi thứ. Nó chỉ ra rằng khi bạn kế thừa từ một hồ sơ, bạn không thể tắt các quy tắc. Bạn chỉ có thể thêm các quy tắc bổ sung và thay đổi cấu hình của các quy tắc (để giảm mức độ nghiêm trọng của chúng).

Nếu bạn đặt mức độ nghiêm trọng đến "info" nó sẽ loại bỏ nó khỏi việc tính toán kỹ thuật nợ. Tôi đã phải làm điều đó với squid:S1213 được nâng lên khi tôi sắp xếp bằng cách sử dụng thứ tự mặc định được chỉ định bởi Eclipse.

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