c# - 从多个线程进行单元测试的最佳方法是什么?

标签 c# multithreading unit-testing testing

这种来自另一个question的后续我的。

基本上,一旦我有了访问该文件的代码(稍后会查看那里的答案),测试它的最佳方法是什么?

我正在考虑创建一个只产生大量 BackgroundWorker 的方法的或其他东西,并告诉他们所有加载/保存文件,并使用不同的文件/对象大小进行测试。然后,从线程获取响应以查看它是否失败/成功/是否使世界崩溃等。

你们能就解决此问题的最佳方法提供任何建议吗?正如我之前所说,这对我来说有点新鲜:)

编辑

正在关注 ajmastrean's帖子:

我正在使用控制台应用程序通过 Debug.Asserts 进行测试 :)


更新

我最初使用 BackgroundWorker 滚动处理线程(因为我已经习惯了来自 Windows 开发人员的线程)我很快意识到,当我在执行测试时需要完成多个操作(线程)才能继续,我意识到这将是一个黑客攻击得到它来做到这一点。

然后我跟进了 ajmastrean的帖子并意识到我真的应该使用 Thread处理并发操作的类。我现在将使用这种方法进行重构(尽管是一种不同的方法)。

最佳答案

在 .NET 中,如果不设置 ManualResetEventAutoResetEventThreadPool 线程将不会返回。我发现这些对于快速测试方法来说有点矫枉过正(更不用说创建、设置和管理的复杂性了)。后台 worker 在回调等方面也有点复杂。

我发现的东西是

  1. 创建线程数组。
  2. 设置每个线程的ThreadStart方法。
  3. 启动每个线程。
  4. 加入所有线程(阻塞当前线程,直到所有其他线程完成或中止)
public static void MultiThreadedTest()
{
    Thread[] threads = new Thread[count];

    for (int i = 0; i < threads.Length; i++)
    {
        threads[i] = new Thread(DoSomeWork());
    }

    foreach(Thread thread in threads)
    {
        thread.Start();
    }

    foreach(Thread thread in threads)
    {
        thread.Join();
    }
}

关于c# - 从多个线程进行单元测试的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41568/

相关文章:

c# - 暂停工作线程并等待主线程上的用户交互

c# - 如何在扩展/方法文件中使用 Invoke 方法?

c# - 如何修复 IIS 上的 ASP.Net Core 404 错误?

c# - Xaml C# 绑定(bind)数据仅在第一次有效

multithreading - 只有 dlmopen 而不是 dlopen 的未解析符号

java - JUnit @Before 和@After 在每次测试之前和之后执行

java - 以编程方式加载数据库设置并与 DBUnit 中的预期数据库进行比较

unit-testing - 随机过程的单元测试?

c# - 位图.Save "Generic Error"

c# - 是否可以在 Unity 编辑器中显示静态字段?