1

我正在编写一些托管代码来包装对IntervalZero 的 RTX 产品的本机调用。RTX 基本上是通过设置内核代理来实现 Windows 下的实时编码。这里重要的是,当使用 DLL_THREAD_ATTACH调用 DllMain时,RTX 会生成代理(并在 DLL_THREAD_DETACH 上将其拆除)。如果尚未生成该代理并且您调用库,您会立即获得BSOD

好吧,我有 99.9% 的把握,当mstest.exe运行它的单元测试时,它会使用 ThreadPool 类将它们排队(这是唯一解释这种行为的东西)。不幸的是,线程在 RTX 库加载之前就已经创建了,所以 DllMain 永远不会被调用,RTX 子系统也不知道它的存在,所以当单元测试试图调用库时,事情就会被撤消.

我真的需要能够在这些东西上运行单元测试,这样我才能获得合理的、可自动化的测试覆盖率。有没有办法告诉 mstest 在运行时为每个测试生成一个新线程?我知道这样做通常会慢一些,但它仍然比蓝屏后恢复要快得多。

4

2 回答 2

0

是否尝试过使用与 nUnit 等 MSTest 不同的框架来查看是否会重现问题?

于 2009-08-12T21:41:38.427 回答
0

好吧,由于这样的问题,我的接受率很低,我会提供一个答案(虽然不是我喜欢的那个)。我不认为让 mstest 表现不同(即每次测试使用单个线程)是可行的。我尝试了几乎所有可以想象的东西。解决此问题的方法是编写一个简单的测试运行器应用程序,该应用程序使用反射来加载和运行测试。通过这样做,我保留了 mstest 语法(尽管功能少了很多)。

从长远来看,需要发生的是 RTX API 需要更友好的按摩。我正在与 OEM 合作,试图在下一个版本中实现这一点。

于 2009-10-06T13:29:53.813 回答