1

IntervalZeroのRTX製品のネイティブ呼び出しをラップするマネージコードを書いています。RTXは基本的に、カーネルプロキシを設定することにより、Windowsでのリアルタイムコーディングを可能にします。ここで重要なのは、DllMainがDLL_THREAD_ATTACHで呼び出されたときにRTXがプロキシを生成することです(そしてDLL_THREAD_DETACHでプロキシを破棄します)。そのプロキシが生成されておらず、ライブラリを呼び出すと、すぐにBSODが発生します。

mstest.exeが単体テストを実行すると、ThreadPoolクラスを使用してそれらをキューに入れると99.9%確信しています(この動作を説明するのはこれだけです)。残念なことに、RTXライブラリが読み込まれる前にスレッドがすでに作成されているため、DllMainが呼び出されることはなく、RTXサブシステムはその存在を認識しません。したがって、単体テストでライブラリを呼び出そうとすると、処理が取り消されます。 。

合理的で自動化可能なテストカバレッジを取得できるように、このようなもので単体テストを実行できる必要があります。テストごとに実行時に新しいスレッドを生成するようにmstestに指示する方法はありますか?通常はそれを行うのが遅くなることはわかっていますが、ブルースクリーンの後で戻るよりもはるかに高速になります。

4

2 に答える 2

0

nUnitのようなMSTestとは異なるフレームワークを使用して、問題が再現されるかどうかを確認しましたか?

于 2009-08-12T21:41:38.427 に答える
0

このような質問のために受け入れ率が低いので、回答を提供します(私が好きなものではありませんが)。mstest の動作を変更する (つまり、テストごとに 1 つのスレッドを使用する) ことは現実的ではないと思います。考えられることはほぼすべて試しました。これを回避するには、リフレクションを使用してテストを読み込んで実行する単純なテスト ランナー アプリを作成します。これを行うことで、mstest 構文を維持しました (ただし、機能は大幅に少なくなりました)。

長期的には、RTX API がより使いやすくなるようにマッサージする必要があるということです。OEM と協力して、次のリリースでそれを取得しようとしています。

于 2009-10-06T13:29:53.813 に答える