Home > Enterprise >  How to test ApplicationStartedEvent in Spring Boot?
How to test ApplicationStartedEvent in Spring Boot?

Time:07-03

I need to write an application startup event listener, here I have an @EventListener:

@EventListener
public void onApplicationEvent(ApplicationStartedEvent startedEvent)

How do I go with this? What I have done until now is, wrote many other unit tests but don't understand if I should (somehow) create an object for the ApplicationStartedEvent which doesn't sound right.

Other questions on SO like this one provide information about creating tests for custom events but this isn't a custom event and I don't want to create this object manually.

CodePudding user response:

I solved it differently as I wanted to unit-test this, but seems like we can only write an Integration Test for this.

Used the following to create sample data:

private static final EasyRandomParameters EASY_RANDOM_PARAMETERS = new EasyRandomParameters()
    .seed(123L)
    .objectPoolSize(100)
    .randomizationDepth(3)
    .charset(StandardCharsets.UTF_8)
    .timeRange(LocalTime.of(9, 0), LocalTime.of(17, 0))
    .stringLengthRange(5, 50)
    .collectionSizeRange(1, 10)
    .scanClasspathForConcreteTypes(true)
    .overrideDefaultInitialization(false)
    .ignoreRandomizationErrors(true);

public static <T> T create(Class<T> ofType) {
    EasyRandom easyRandom = new EasyRandom(EASY_RANDOM_PARAMETERS);
    return easyRandom.nextObject(ofType);
}

And used it like:

ApplicationStartedEvent applicationStartedEvent = create(ApplicationStartedEvent.class);

Then called the required method. Not exactly the event listener of course but did the job.

  • Related