「プロジェクト マネージャー」が、テストするプロジェクト (ほぼ最終製品) をくれて困っています。
最後の部分をコーディングしたのは、Silverlight での大きなプロジェクトです。
ここには、(テストに対して) 多くの問題があり、データベース接続 (データ層、サービス、セッション ストレージなど) が別のプロジェクト (ソース コードにアクセスできない) からの閉じられた dll にあり、これらの dll には次のものが含まれています。次のようなコレクション クラス:
public class SomeCollection
{
public static SomeCollection GetCollectionByName(string name);
}
また、スレッドの制御、エラーの確認、データ読み込みの終了/完了などに使用される別のユーティリティ クラスがあります。
public static class BasicUtilities
{
public static T ExecuteAndFinish(this T baseclass, Action<T> loaded);
public static T ExecuteAndFinish(this T baseclass, Action<T> loaded, Action<bool> errors);
}
次に、データをロードしてある種のコントロールなどに入力する必要がある ViewModel で、一般的な呼び出しは次のようになります。
public class SomeViewModel : ViewModelBase
{
...
SomeCollection.GetCollectionByName("AIdentifier").ExecuteAndFinish
(collectionLoaded) =>
{
//do something with the collection, populate a control, grid, listbox, etc
});
...
}
次に、私がテストの初心者であることを「明確に」して、SomeViewModel をテストしたいと思います。moq (特別なモデル、UtilyClass、DataProviders などをモックするため) または Ninject (DI のため、私はそれについてあまり知りません) の 2 つのフレームワークを使用できます。
テスト用に SomeViewModel のコンストラクターをオーバーロードして、使用される一般的な呼び出しを置き換える SomeCollection 型の新しい Virtual プロパティにモック オブジェクトを渡す方法があります。
public class SomeViewModel : ViewModelBase
{
...
SomeCollectionProperty.GetCollectionByName("AIdentifier").ExecuteAndFinish
(collectionLoaded) =>
{
//do something with the collection, populate a control, grid, listbox, etc
});
...
public virtual SomeClass SomeCollectionProperty { get; set; }
...
}
クラス SomeCollection の静的メソッド GetCollectionByName をモックできないため、それは機能しません。さらに悪いことに、その dll を変更することもできません。
DIでは、このようなことが起こるようで、うまくいかないでしょう。わかりません。
どこでもコードを強制的に変更する必要があるようですが、datalayer.dll (グループ化) を変更することはできません。
私がしなければならないことは何ですか?どうもありがとう。