gpt4 book ai didi

c# - 如何在 .NET 中测试并发场景?

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:05 26 4
gpt4 key购买 nike

我用过并发,但我不知道有什么好的方法来测试它。

我想知道是否有任何方法可以“强制”任务以特定顺序执行以模拟测试用例。

例如:

  1. 客户#1 提出请求
  2. 服务器开始向客户端 #1 检索数据
  3. 客户端 #2 在服务器仍在响应客户端 #1 时发出另一个请求
  4. 断言<<某事>>

我见过一些人使用自定义 TaskScheduler。有道理吗?

最佳答案

我也遇到过好几次这个问题。最终我创建了一个可以启动一堆线程来执行并发操作的助手。帮助程序提供同步原语和日志记录机制。这是来自单元测试的代码片段:

[Test]
public void TwoCodeBlocksInParallelTest()
{
// This static method runs the provided Action delegates in parallel using threads
CTestHelper.Run(
c =>
{
Thread.Sleep(1000); // Here should be the code to provide something
CTestHelper.AddSequenceStep("Provide"); // We record a sequence step for the expectations after the test
CTestHelper.SetEvent();
},
c =>
{
CTestHelper.WaitEvent(); // We wait until we can consume what is provided
CTestHelper.AddSequenceStep("Consume"); // We record a sequence step for the expectations after the test
},
TimeSpan.FromSeconds(10)); // This is a timeout parameter, if the threads are deadlocked or take too long, the threads are terminated and a timeout exception is thrown

// After Run() completes we can analyze if the recorded sequence steps are in the correct order
Expect(CTestHelper.GetSequence(), Is.EqualTo(new[] { "Provide", "Consume" }));
}

它可用于测试客户端/服务器或组件中的同步,或简单地运行一个超时线程。我将在接下来的几周内继续改进这一点。这是项目页面: Concurrency Testing Helper

关于c# - 如何在 .NET 中测试并发场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25361706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com