【问题标题】:spawning threads in a unit test在单元测试中产生线程
【发布时间】:2013-08-29 00:11:26
【问题描述】:

有很多关于如何对线程代码进行单元测试的信息,但没有关于在单元测试方法中生成线程以测试同步机制的信息。

[TestMethod]
public void TestDiscountThreading() {
  Thread[] threads = new Thread[50];
  for (int i = 0; i < threads.Length; i++) {
    threads[i] = new Thread(PriceThread);
    threads[i].Start();
  }

  for (int i = 0; i < threads.Length; i++)
    threads[i].Join();
}

我想强调测试 PriceThread 内的代码中的同步是否正确实现,但每次运行该方法时,我都会收到错误“测试运行时代理进程已停止”。甚至有可能在单元测试中生成线程或者这里有什么问题?

我使用 Visual Studio 2010 和随附的单元测试框架

【问题讨论】:

  • 这在我看来甚至不像是单元测试。更像是负载测试或功能测试。
  • 您无法测试同步是否正常工作,只能发现它没有正常工作。
  • 我同意,测试同步并不是 100% 有用,因为它在实时应用程序中无法预测代码的运行方式,但是产生 100 个调用相同函数的线程的测试应该可以说明一些事情

标签: c# .net unit-testing testing


【解决方案1】:

这并不是一个完整的答案,但我建议您查看VS 2010 Test Runner error "The agent process was stopped while the test was running." 以获得想法。

你知道异常是在代码的什么地方抛出的吗?

编辑答案:

这是主线程以外的线程抛出未处理异常时的结果。这里就是这种情况,即循环或线程本身没有问题。

【讨论】:

  • 测试代码本身和被测试代码都没有抛出异常
  • 在抛出异常时打开中断后,它在测试代码本身中显示了一个空引用异常.....我忙于整个线程的事情,以至于我对普通代码有一个盲点.感觉很愚蠢,三个月的治疗应该可以解决问题
  • 嗯,对一个对 OP 有帮助的答案投了反对票,即使它不是一个完整的答案,wtf?没有评论?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多