Ashkan S
Ashkan S

Reputation: 11471

C# test, How to make delay between my tests?

I have some tests that will call some external service. They have a limit on the API calls that I can call in every second so when I run all my tests, the last ones are going to fail because the limit on the API call is reached.

How can I limit number of concurrent tests/ put a delay afterwards/ make those special ones work on 1 thread?

My code is a normal test code using TestFixture like this:

[TestFixture]
public class WithExternalResource        
{
    SearchProfilesResponse _searchProfilesResponse;
    [OneTimeSetUp]
    public async Task WithNonExistingProfile()
    {
       _searchProfilesResponse= await WhenSearchIsCalled(GetNonExistingProfile());
    }

    [Test]
    public void Then_A_List_Of_Profiles_Will_Be_Returned()
    {
        _searchProfilesResponse.Should().NotBeNull();
    }

    [Test]
    public void Then_Returned_List_Will_Be_Empty()
    {
        _searchProfilesResponse.Should().BeEmpty();
    }
}

Upvotes: 1

Views: 6858

Answers (1)

S.Spieker
S.Spieker

Reputation: 7355

You can limit your whole fixture to single thread with:

// All the tests in this assembly will use the STA by default
[assembly:Apartment(ApartmentState.STA)]

Or you can just mit certain tests to single thread with:

[TestFixture]
public class AnotherFixture
{
  [Test, Apartment(ApartmentState.MTA)]
  public void TestRequiringMTA()
  {
    // This test will run in the MTA.
  }

  [Test, Apartment(ApartmentState.STA)]
  public void TestRequiringSTA()
  {
    // This test will run in the STA.
  }
}

If you want to have a delay between all tests you could add a Thread.Sleep() in Setup or TearDown:

[SetUp] public void Init()
{ 
  /* ... */ 
  Thread.Sleep(50);
}
[TearDown] public void Cleanup()
{ /* ... */ }

Upvotes: 2

Related Questions