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.
}
}
如果你想在所有测试之间有一个延迟,你可以在 Setup
或 TearDown
中添加一个 Thread.Sleep()
:
[SetUp] public void Init()
{
/* ... */
Thread.Sleep(50);
}
[TearDown] public void Cleanup()
{ /* ... */ }
我有一些测试会调用一些外部服务。他们对我每秒可以调用的 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.
}
}
如果你想在所有测试之间有一个延迟,你可以在 Setup
或 TearDown
中添加一个 Thread.Sleep()
:
[SetUp] public void Init()
{
/* ... */
Thread.Sleep(50);
}
[TearDown] public void Cleanup()
{ /* ... */ }