我有一个建立对象并返回它的方法。
该对象作为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?
我会改变这一行:
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)
验证当前生产代码的唯一方法是,是,检查CorrelationId是否不为null。您还可以检查所需字符串的布局是否与有效的UUID字符串匹配。
当然,当您想进行更好的检查时,只需替换UUID.randomUUID().toString()为可以控制的内容即可。
例如,您可以UUIDGenerator使用默认方法创建一个接口,该方法创建一个随机 UUID,如代码所示。但是,在测试设置中,您提供了返回特定 UUID 的该接口的实现。
然后,您的测试代码可以知道应该使用哪个UUID,以及assertThat(actualUuid, is(expectedUuid))。