代码之家  ›  专栏  ›  技术社区  ›  ctacke

使用threadpool运行mstest*without*it

  •  1
  • ctacke  · 技术社区  · 15 年前

    我正在编写一些托管代码来包装本机调用 IntervalZero's RTX product . 通过设置内核代理,RTX基本上可以在Windows下进行实时编码。这里重要的是,RTX在 DllMain 使用dll_thread_attach调用(并在dll_thread_detach时将其分解)。如果该代理尚未生成,并且您对库进行了调用,则会得到一个 立即的 BSOD .

    嗯,我99.9%的确信当 mstest.exe 运行它的单元测试,使用threadpool类(这是唯一解释这种行为的东西)将它们排队。不幸的是,甚至在加载RTX库之前就已经创建了线程,所以从不调用dllmain,并且RTX子系统不知道它的存在,所以当单元测试试图调用库时,事情就会被撤销。

    我真的需要能够对这些东西运行单元测试,这样我就可以得到合理的、自动化的测试覆盖范围。是否有方法告诉MSTEST在运行时为每个测试生成一个新线程?我知道这样做通常会比较慢,但它仍然会比蓝屏后的恢复快得多。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Chris Marisic    15 年前

    是否尝试过使用与像nunit这样的mstest不同的框架来查看这是否重现了问题?

        2
  •  0
  •   ctacke    15 年前

    因为这样的问题,我的接受率很低,所以我会提供一个答案(尽管不是我喜欢的答案)。我不认为让MSTEST有不同的行为(即每个测试使用一个线程)是可行的。我尽了一切可能。解决这个问题的方法是编写一个简单的测试运行应用程序,它使用反射来加载和运行测试。通过这样做,我保留了MSTEST语法(尽管功能要少得多)。

    从长远来看,需要做的是RTX API需要按摩,以便更友好。我正与原始设备制造商合作,试图在下一个版本中实现这一点。

    推荐文章