3

我正在使用优秀的 PITest 框架。我想知道 PITest 中是否有与声纳“// NOSONAR”等效的东西,从而某些行会被排除在 PITest 覆盖范围之外(因此报告上不是红色的)?我知道可以排除方法和类,我只是在寻找更细粒度的行级别的东西。

我的用例如下:

public enum FinancialStatementUserType {
CONSUMER, BUSINESS, RETAILER;

}

    public static RecipientType toRecipientType(FinancialStatementUserType userType) {
        Assert.notNull(userType, "userType is null");

        switch (userType) {
           case BUSINESS:
           case CONSUMER:
               return RecipientType.CustomerPerson;
           case RETAILER:
            return RecipientType.Seller;

        default:
            throw new IllegalStateException(String.format("No RecipientType for financial statement user type: %s", userType));
    }
}

我遇到的问题是“默认”子句无法访问,因为所有枚举当前都被 switch 语句覆盖。我们添加“detault”语句的原因(除了它是一个很好的做法之外)是为了枚举在未来得到扩展。

有任何想法吗?

4

1 回答 1

3

无法在 ptest 中排除每行级别的代码 - 它适用于已编译的字节码,因此无法访问代码中的标签和注释,因为这些在编译时会丢失。

您可以开箱即用的最细粒度的排除是在方法级别。

对于您在此处突出显示的特定情况,一个可能的选项是更改您的编码样式。

如果 RecipientType 类型和 FinancialStatementUserType 密切相关,您可以通过明确关系来确保在添加新 FinancialStatementUserType 时逻辑不会中断。

enum FinancialStatementUserType {
  CONSUMER(RecipientType.CustomerPerson), 
  BUSINESS(RecipientType.CustomerPerson), 
  RETAILER(RecipientType.Seller);

  private final RecipientType recipientType;  

  FinancialStatementUserType(String recipientType) {
    this.recipientType = recipientType;
  }

  RecipientType recipientType() {
    return recipientType;
  }

}
于 2017-05-05T09:02:51.340 回答