在junit中声明UUID

Thi*_*iru 1 java uuid junit

我有一个建立对象并返回它的方法。

该对象作为UUID作为其字段之一。在构建对象时,会生成随机UUID。这是代码:

public MetaData getMetaData(String id) {
  return MetaData.newBuilder().setId(id)
    .setCorrelationId(UUID.randomUUID().toString())
    .setCreatedAt(now(UTC).format(ISO_ZONED_DATE_TIME))
    .build();
}
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

@Test
public void shouldVerifyIfTheMetaDataIsBuild() {

  MetaData metaData = handler.getMetaData("1234");

  assertThat(metaData.getId(), is("1234"));
  assertThat(metaData.getCorrelationId(), isNotNull());
}
Run Code Online (Sandbox Code Playgroud)

我只是在验证是否correlationId不为null。有没有更好的方法来验证UUID

Jes*_*per 7

我会改变这一行:

assertThat(metaData.getCorrelationId().toString(), isNotNull());
Run Code Online (Sandbox Code Playgroud)

至以下内容:

assertThat(metaData.getCorrelationId(), isNotNull());
Run Code Online (Sandbox Code Playgroud)

否则你会得到NullPointerExceptionifmetaData.getCorrelationId()返回null而不是断言失败。

此外,您可以metaData.getCorrelationId()通过尝试解析它来测试是否返回表示有效 UUID 的字符串:

try {
    UUID.fromString(metaData.getCorrelationID());
} catch (IllegalArgumentException e) {
    fail("Correlation ID is not a valid UUID: " + metaData.getCorrelationId());
}
Run Code Online (Sandbox Code Playgroud)


Gho*_*ica 5

验证当前生产代码的唯一方法是,是,检查CorrelationId是否不为null。您还可以检查所需字符串的布局是否与有效的UUID字符串匹配。

当然,当您想进行更好的检查时,只需替换UUID.randomUUID().toString()为可以控制的内容即可

例如,您可以UUIDGenerator使用默认方法创建一个接口,该方法创建一个随机 UUID,如代码所示。但是,在测试设置中,您提供了返回特定 UUID 的该接口的实现。

然后,您的测试代码可以知道应该使用哪个UUID,以及assertThat(actualUuid, is(expectedUuid))