排除 PITest 中的某些代码行
Excluding certain lines of code in PITest
我正在使用优秀的 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));
}
}
我遇到的问题是 'default' 子句无法访问,因为所有枚举当前都被 switch 语句覆盖。我们添加 'detault' 语句的原因(除了这是一个很好的做法),是为了防止枚举在未来得到扩展。
有什么想法吗?
无法在 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;
}
}
我正在使用优秀的 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));
}
}
我遇到的问题是 'default' 子句无法访问,因为所有枚举当前都被 switch 语句覆盖。我们添加 'detault' 语句的原因(除了这是一个很好的做法),是为了防止枚举在未来得到扩展。
有什么想法吗?
无法在 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;
}
}