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