C#测试,如何在两次测试之间进行延迟?

时间:2018-07-16 11:08:23

标签: c# nunit nunit-3.0

我进行了一些测试,这些测试将调用某些外部服务。它们对我每秒可以调用的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();
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法将整个治具限制为单线程:

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

如果您希望所有测试之间都有延迟,可以在Thread.Sleep()Setup中添加TearDown

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