【问题标题】:Trying to unit test a method and I'm unable to get rid of a mutation试图对一种方法进行单元测试,但我无法摆脱突变
【发布时间】:2021-05-06 04:33:22
【问题描述】:

我正在使用 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 被杀死:无更改条件边界 → 幸存
  2. 否定条件→KILLED

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

【问题讨论】:

    标签: java junit5 mutation-testing pitest


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多