MVVM パターンを使用した WPF プロジェクトがあります。
特定のビューモデルでは、バックグラウンド タスク (Task クラス) を使用して ObservableCollection を定期的に埋めます。
以下のコードを使用して、実際にコレクションを作成します。
private void InitialiseAssignablePermissions()
{
var assignablePermissions = DetermineAssignablePermissions();
CurrentDispatcher.Invoke(() =>
{
foreach (var ap in assignablePermissions)
{
AssignablePermissions.Add(ap);
}
});
}
これは完全に機能し、単体テストは問題なく実行され、すべて緑色になります。
ただし、ICollectionView が ObservableCollection に接続されている場合、テストを実行するとクロススレッド例外が発生し、テストは失敗します。コレクションにアイテムを最初に追加しようとすると、例外が発生します。プロジェクトが実行されても、コードは問題なく実行されます。アイテムをフィルタリングしたいので、コレクション ビューが必要です。
例外は次のとおりです。
This type of CollectionView does not support changes to its
SourceCollection from a thread different from the Dispatcher thread.
CurrentDispatcher クラスは、単体テスト用に追加した単純なものです。
internal static class CurrentDispatcher
{
internal static void Invoke(Action action)
{
if (App.Current != null)
App.Current.Dispatcher.Invoke(action);
else
action();
}
}
コレクション ビューを追加して単体テストを行うにはどうすればよいですか?