1

ユニットテストをデバッグモードで実行すると、ある時点でVisualStudioデバッガーが中断して再入可能性MDAが表示されます。リンクされた記事では、これは、ベクトル化された例外ハンドラーなどの低レベルのオペレーティングシステム拡張ポイントが管理対象アプリケーションコードにコールバックしたときに発生することを説明しています。

どうやらこれはヒープの破損やその他の深刻な問題を引き起こす可能性があるので、私は間違いなくそれを修正したいと思います。

この警告が表示されたポイントでスタックトレースを確認していますが、ここでどの「低レベルのオペレーティングシステム拡張ポイント」が関係しているかを特定するのに問題があります。System.Windows.Forms.Cursors.VSplitmstestとgetterの呼び出しによって引き起こされたもの以外に、管理されていない/管理された遷移は表示されません。また、単体テストからそのゲッターを呼び出すだけでは、警告をトリガーするのに十分ではないようです。

ここで何を間違えたのですか、どうすれば修正できますか?

4

1 に答える 1

2

Hans Passan tが提案したように(残念ながら彼はここで答えを削除しました)、問題は、私の単体テストで、メッセージループのあるGUIスレッドのコンテキストでのみ呼び出されるように設計されたコードを呼び出していることです。単体テストにはそのようなメッセージループはありません。

この場合、問題はSystem.Windows.Forms.Cursors.VSplitゲッターです。これを回避する方法は2つあります。

  • MVVMパターンに厳密に従い、問題のあるコードをビュー内で分離し、ビューモデルのみをテストします。
  • または、単体テストでモックされたインターフェイスの背後にカーソル管理コードを非表示にします
于 2010-07-09T12:33:14.750 に答える