VladislavShcherba
VladislavShcherba

Reputation: 470

Why methods annotated with @BeforeAll and @AfterAll should be static in JUnit 5?

I know that methods annotated with @BeforeAll and @AfterAll JUnit 5 annotations should be static unless TestInstance.Lifecycle.PER_CLASS is used.

What I can't understand is why JUnit 5 imposes such limitations? If it is allowed with PER_CLASS lifecycle, what changes drastically when using PER_METHOD?

Thanks in advance.

Upvotes: 4

Views: 2656

Answers (1)

Rob Spoor
Rob Spoor

Reputation: 9175

When you use PER_METHOD, a new instance of the test class is created for each test method. Methods annotated with @BeforeAll would need to be called before any instance is created. Likewise, @AfterAll needs to be called after all tests are done, and therefore no instance is available anymore. That lack of instances means these methods need to be static.

Upvotes: 8

Related Questions