在junit中声明UUID

时间:2018-07-16 07:29:49

标签: java junit uuid

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

作为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();
}

这是我的考试:

@Test
public void shouldVerifyIfTheMetaDataIsBuild() {

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

  assertThat(metaData.getId(), is("1234"));
  assertThat(metaData.getCorrelationId(), isNotNull());
}

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

5 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

我会更改这一行:

assertThat(metaData.getCorrelationId().toString(), isNotNull());

到以下:

assertThat(metaData.getCorrelationId(), isNotNull());

否则,如果NullPointerException返回metaData.getCorrelationId()而不是断言失败,则会得到null

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

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

答案 2 :(得分:0)

正如@GhostCat正确地说的那样,由于我们无法控制UUID.randomUUID(),因此唯一的方法是检查生成的UUID是否不为null。为此,您可以使用以下代码:

assertNotNull(metaData.getCorrelationId());

答案 3 :(得分:0)

您可以验证的有关UUID的另一件事是它的长度(因为它总是36 java.util.UUID.randomUUID().toString() length)。

将来有机会检测实施中的变化。

答案 4 :(得分:0)

使用UUID时,我使用正则表达式检查字符串模式。

assertTrue(id.matches(Pattern("([a-f0-9]{8}(-[a-f0-9]{4}){4}[a-f0-9]{8})")))

通过这种方式,我检查它是否存在以及String是否确实是UUID(就像我曾经遇到的那样),意外更改在其中放置了一个空间,该空间将在assertNotNull解决方案中通过。