3

C# アプリで mvvm に DispatcherHelper.CheckBeginInvokeOnUI を使用しており、msTests を実行しようとしています。呼び出す UnitTest から行う呼び出しはDispatcherHelper.CheckBeginInvokeOnUI(delegate { //do stuff }); 、単一の UnitTest から呼び出されたときに正常に動作します (もちろん、DispatcherHelper.Initialize() を呼び出した後)。

ただし、単体テストがより大きなコンテキストで実行されると、問題が発生します-そのクラスのすべてのテストを実行すると(いずれも DispatcherHelper を使用する必要はありません)

DispatcherHelper を初期化しないと、デリゲート呼び出しに到達すると、予想どおり null 例外がスローされるため、初期化が必要です。UnitTest 内での初期化に問題はありますか? 単一の単体テストのコンテキストでなぜ機能するのか想像できませんが、それ以上ではありません。

ありがとう!

4

1 に答える 1

1

編集:本当の問題は、MsTestがUnitTestsを同時に別のスレッドにスローして、すべてをすばやく実行することであるようです。ディスパッチャーの「初期化」には、次のコードがあります。

Initialize()
{
    if (UIDispatcher != null)
    { return null }
    else // initialize
}

つまり、クリアせずに初期化できるのは1回だけであり、最終的にはそのスレッドに対してのみ初期化されます。ただし、単体テストはすべて異なるスレッドで行われるため、ディスパッチャーへの呼び出しをすべて渡すという問題が発生します。私はそれを「初期化解除」する組み込みの方法を見つけようとしています(したがって、UIDispatcherをnullに戻します)が、Willが提案したように、単にコードを編集するのが最善かもしれません。

于 2012-07-10T11:47:02.157 に答える