微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试对方法进行单元测试,但我无法摆脱突变

如何解决尝试对方法进行单元测试,但我无法摆脱突变

我正在使用 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));
  }

}

当我查看我最悲惨的报告时,它告诉我以下内容

  1. 位置:validateHeader 被杀死:没有改变条件边界→ SURVIVED
  2. 否定条件→ KILLED

关于如何杀死这种突变有什么想法吗?

解决方法

当使用长度 > 36 的请求 ID 时,您只有一个测试用例来定义预期行为。

要杀死突变体,您需要进行额外的测试,以显示长度 == 36 的 id 的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。