【问题标题】:Testing Code With Threads in .NET在 .NET 中使用线程测试代码
【发布时间】:2010-08-14 00:05:50
【问题描述】:

我需要测试我经过严格测试的代码在被多个线程调用时是否有效

所以我使用 TreadPool.QueueUserWorkItem 在 TestMethod 中循环调用代码

但是,当所有启动的线程仍在运行时,似乎并没有保留当前线程。

假装代码....

使用 Microsoft.VisualStudio.TestTools.UnitTesting

10 create a server

20 for( a number of iterations ) start a thread running a function

30 while all the threads are still doing stuff hang on to the server

40 now dispose of the server

无需等待,我的单元测试就会在工作完成之前处理服务器。

有什么值得感激的见解...?

【问题讨论】:

  • 您是否正在为“服务器”对象寻找某种引用计数?
  • 可以,谢谢建议

标签: .net multithreading unit-testing


【解决方案1】:

主线程的目标是等待所有其他线程完成后再处理服务器

如果是这样,您应该查看一个非常详细的答案,我收到了我前一段时间提出的类似问题。您应该考虑的许多不同方法都包含在答案中。

The answer that was given is located here.

希望有帮助!

【讨论】:

  • 是的,只是说 thread.Join 在测试框架中不起作用 - 不知道为什么。无论如何,我会好好阅读你明天发送的链接(很晚,闭上眼睛,妻子打鼾)-感谢您的迅速回复
  • 从这个答案中我将使用 Join - 感谢您的指点
【解决方案2】:

Join() 是最简单的。如果你不能这样做,你可以为每个线程创建一个事件并等待事件被签署。或者,您可以为每个线程创建一个带有初始计数的信号量,然后等待所有线程释放该信号量。

【讨论】:

  • join 在测试中不起作用,除非你的调试很好
  • Join 毕竟确实有效,但在测试过程中会抛出一个错误,而在调试时却不会......
【解决方案3】:

我对 .NET 了解不多,但在 java 中我会这样做

10 create a server

20 for( a number of iterations ) start a thread running a function

30 while(all the threads are still doing stuff){
    MainThread.Sleep(xMiliseconds)
}

40 now dispose of the server

这样 MainThread 将不断循环,睡眠,循环,睡眠,直到所有线程都完成,然后它会处理服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多