In JUnit you have the @RepeatedTest
annotation. This annotation allows you to run a single test method multiple times with different execution contexts. Unlike simply calling a method in a loop, each repetition is treated as a separate test execution with its own lifecycle.
Although it can be useful to discover and investigate race conditions, I never had a good reason to start using this kind of functionality. But with the introduction of AI workloads inside my applications, times have changed.
As AI output is less deterministic, it now starts to make sense to run the same test multiple times as the AI output could differ from test run to test run.
Let me show you how to do this using NUnit and XUnit...
NUnit: Built-in Repeat Attribute
NUnit provides the most elegant solution with its built-in [Repeat]
attribute:
XUnit: Using Theory and Custom Attributes
XUnit doesn't provide an out-of-the-box equivalent to the @RepeatedTest
annotation but you can build your own custom attribute in combination with the [Theory]
attribute:
Two important remarks when using the implementation above:
- This only works in combination with the
[Theory]
attribute as we are using the data driven tests functionality in XUnit. If you try to use this with the [Fact] attribute, it will not work. - You need to add a parameter to your test to pass the position. If you don’t add this parameter, you’ll get a runtime error.