Skip to content
Advertisement

Asserting UUID in junit

I have a method which builds an object and returns it.

The object as UUID as one of its fields. While building the object, random UUID is generated. Here is the code:

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

Here is my test:

@Test
public void shouldVerifyIfTheMetaDataIsBuild() {

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

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

I’m just verifying if the correlationId is not null or not. Is there a better way to verify the UUID?

Advertisement

Answer

The only way to verify the current production code is to, yes, check that CorrelationId is not null. You could also check that the layout of the expected string matches a valid UUID string.

Of course, when you want to a bit of better checking, then you simply have to replace UUID.randomUUID().toString() with something that you can control.

For example you could create a UUIDGenerator interface, with a default method that creates a random UUID, as shown in your code. But in your test setup, you instead provide an implementation of that interface that returns a specific UUID.

Then your test code could know which UUID should be used, and assertThat(actualUuid, is(expectedUuid)).

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement