代码之家  ›  专栏  ›  技术社区  ›  Thiru

在JUnit中断言UUID

  •  1
  • Thiru  · 技术社区  · 6 年前

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

    对象作为其字段之一的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 不为空。有没有更好的方法来验证 UUID ?

    4 回复  |  直到 6 年前
        1
  •  4
  •   GhostCat    6 年前

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

    当然,当你想做更好的检查时,你只需更换 UUID.randomUUID().toString() 用你能用的东西 控制 .

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

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

        2
  •  2
  •   Jesper    6 年前

    我将更改此行:

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

    致:

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

    否则你会得到一个 NullPointerException 如果 metaData.getCorrelationId() 退货 null 而不是断言失败。

    此外,您可以测试 元数据.getCorrelationID() 通过尝试分析一个有效的UUID,返回一个字符串:

    try {
        UUID.fromString(metaData.getCorrelationID());
    } catch (IllegalArgumentException e) {
        fail("Correlation ID is not a valid UUID: " + metaData.getCorrelationId());
    }
    
        3
  •  1
  •   staszko032    6 年前

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

    将来将有机会检测实现中的更改。

        4
  •  0
  •   Pang firemonkey    6 年前

    正如@ghostcat所说的,因为我们无法控制 UUID.randomUUID() 唯一的方法是检查生成的UUID是否不为空。为此,您可以使用以下代码:

    assertNotNull(metaData.getCorrelationId());