问题描述
我正在使用 JUnit 5 和 Pitest 1.6.2,我正在尝试对以下方法进行单元测试
public class Validator {
public static final int MAX_REQUEST_ID_LENGTH = 36;
public void validateHeader(String requestId,String retryIndicator,ChannelIndicator channelIndicator,String apiSignature,Instant transactionTime) {
if (requestId.length() > MAX_REQUEST_ID_LENGTH) {
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR,DEPOSIT);
}
}
}
使用以下单元测试
@ExtendWith(MockitoExtension.class)
class ValidatorTests {
@InjectMocks
Validator validator;
@Mock
private ErrorLogFactory errorLogFactory;
private final String REQUEST_ID = "1612207630840";
private final String REQUEST_ID_GREATER_THAN_MAX = StringUtils.repeat("*",MAX_REQUEST_ID_LENGTH + 1);
private final String RETRY_INDICATOR = "false";
private final String INVALID_RETRY_INDICATOR = "ABCD";
private final String API_SIGNATURE = "api-signature";
@test()
void validateHeader_requestId_greater_than_max() {
Exception exception = assertThrows(ServerValidationException.class,() ->
{ validator.validateHeader(REQUEST_ID_GREATER_THAN_MAX,RETRY_INDICATOR,ChannelIndicator.ONLINE,API_SIGNATURE,Instant.Now()); });
assertTrue(exception.getMessage().contains(SCHEMA_VALIDATION_ERROR));
}
}
当我查看我最悲惨的报告时,它告诉我以下内容
- 位置:validateHeader 被杀死:没有改变条件边界→ SURVIVED
- 否定条件→ KILLED
关于如何杀死这种突变有什么想法吗?
解决方法
当使用长度 > 36 的请求 ID 时,您只有一个测试用例来定义预期行为。
要杀死突变体,您需要进行额外的测试,以显示长度 == 36 的 id 的行为。