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

Rob*_*per 17 c# testing multithreading unit-testing

这是从我的另一个问题开始的.

基本上,一旦我有代码访问该文件(将在一分钟内审查答案)什么是最好的测试方法?

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

你能提出任何关于最佳方法的建议吗?正如我之前所说,这对我来说有点新鲜:)

编辑

ajmastrean的帖子:

我正在使用控制台应用程序来测试Debug.Asserts :)


更新

我最初使用BackgroundWorker来处理线程(因为我已经习惯了来自Windows开发)我很快就意识到当我执行测试时需要完成多个操作(线程)才能继续,我意识到这将是让它做到这一点有点破解.

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

Ant*_*ean 13

在.NET中,ThreadPool如果没有设置ManualResetEvents或AutoResetEvents ,线程将不会返回.我发现这些过度杀伤是一种快速的测试方法(更不用说创建,设置和管理的复杂程度).后台工作者也有一些复杂的回调等.

我发现有效的东西

  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();
    }
}
Run Code Online (Sandbox Code Playgroud)