アプリケーションをテストしています。メソッドには、リクエストをサーバーに送信する別の[TearDown]
メソッドが含まれています。これはかなり遅いです。一方、サーバーは同時に 3 つを超えるリクエストを処理できません。
そこで、セマフォを使用することにしました。
[TestFixture]
public class TestBase
{
private const int MaxThreadsCount = 3;
private readonly Semaphore _semaphore = new Semaphore(MaxThreadsCount, MaxThreadsCount);
[SetUp]
public virtual void Setup()
{
}
[TearDown]
public void CleanUp()
{
//...some code
new Thread(_ => SendRequestAsync("url/of/a/server", parameters)).Start();
}
private void SendRequestAsync(string url, NameValueCollection parameters)
{
_semaphore.WaitOne();
string result = MyServerHelper.SendRequest(url, parameters);
Assert.That(string.IsNullOrEmpty(result), Is.False, "SendRequest returned false");
}
[Test]
public void Test01()
{
Assert.AreEqual(1, 1);
}
[Test]
public void Test02()
{
Assert.AreEqual(1, 1);
}
[Test]
public void Test03()
{
Assert.AreEqual(1, 1);
}
//...........................
[Test]
public void TestN()
{
Assert.AreEqual(1, 1);
}
}
ただし、正しく動作しないようです。現在、サーバーのログ ファイルにはレコードがありません。これは、サーバーが要求を受信していないことを意味します。
1) 私は何を間違えましたか?
2) セマフォを初期化する方法:
private readonly Semaphore _semaphore = new Semaphore(MaxThreadsCount, MaxThreadsCount);
また
private readonly Semaphore _semaphore = new Semaphore(0, MaxThreadsCount);