C# 测试,如何在我的测试之间进行延迟?

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

我有一些测试会调用一些外部服务。他们对我每秒可以调用的 API 调用有限制,所以当我 运行 我所有的测试时,最后的测试将失败,因为 API 调用的限制是达到。

如何限制并发测试的数量/之后延迟/让那些特殊的测试在 1 个线程上工作?

我的代码是使用 TestFixture 的普通测试代码,如下所示:

[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();
    }
}

您可以将整个夹具限制为单线程:

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

或者您可以使用以下方法将某些测试分配给单线程:

[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.
  }
}

如果你想在所有测试之间有一个延迟,你可以在 SetupTearDown 中添加一个 Thread.Sleep()

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