我正在使用优秀的PITest框架。我想知道在PITest中是否存在与Sonars“// 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));
}
}
我遇到的问题是'default'子句无法访问,因为switch语句当前涵盖了所有枚举。我们添加'detault'语句的原因(除了这是一个很好的做法之外),是因为枚举在将来得到扩展。
有什么想法吗?
答案 0 :(得分:1)
无法在pitest中的每行级别上排除代码 - 它可以在编译的字节码上工作,因此无法访问代码中的标记和注释,因为它们在编译时会丢失。
您可以开箱即用的最精细的排除是在方法级别。
对于您在此处突出显示的特定情况,可能的选项是更改您的编码风格。
如果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;
}
}