使用线程池*不*运行 mstest

问题描述 投票:0回答:2

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

我 99.9% 确信,当

mstest.exe 运行其单元测试时,它会使用 ThreadPool 类将它们排队(这是解释此行为的唯一原因)。不幸的是,线程在 RTX 库加载之前就已经创建了,因此 DllMain 永远不会被调用,RTX 子系统也不知道它的存在,因此当单元测试尝试调用库时,事情就会失败。 .

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

c# mstest rtx
2个回答
0
投票
是否尝试过使用与 MSTest 不同的框架(例如 nUnit)来查看是否会重现问题?


0
投票
我认为让 mstest 表现不同(即每个测试使用单个线程)是不可行的。我尝试了几乎所有可以想象的事情。解决方法是编写一个简单的测试运行器应用程序,使用反射来加载和运行测试。通过这样做,我保留了 mstest 语法(尽管功能少了很多)。

从长远来看,RTX API 需要进行调整以使其更加友好。我正在与 OEM 合作,尝试在下一个版本中实现这一点。

© www.soinside.com 2019 - 2024. All rights reserved.