As part of one of my projects I have a set of smoke tests that I use to test the availability and correct behaviour of an external API.
All our code that interacts with other services is using retries with exponential backoff(through Polly) which helps with the reliability and resiliency of our system.
Unfortunately this also means that when we use the same code for our smoke tests, it takes a lot of time before the tests fail when the external API is not available. Taking into account all the retries, an individual test will fail after about 2 minutes. If you know that we have a lot of smoke tests available, the tests take a long time to execute.
I could reconfigure the retry policies to fail sooner but another option is to cancel a test when it takes too long.
In XUnit you can do this through the Timeout property on the [Fact] attribute.
Remark: Timeout is only supported when parallellization is disabled.
An example
I first disabled the parallel test execution inside the test assembly using:
Then I created a test where I set the timeout to 5000 milliseconds:
After 5 seconds the test is cancelled. Notice that Visual Studio didn’t report the test duration correctly: