私はViewModelを持っています。これは、初期化されるとオブジェクトのリストを作成します。これらのオブジェクトは、IoCからのインターフェイス実装を解決することによって作成されます。これはどのようにテストする必要がありますか?
ビューモデル
public class ApplianceViewModel : IAppliance
{
private List<IHardware> HardwareItems {get; set;}
public ApplianceViewModel()
{
HardwareItems = new List<IHardware>();
var hardware1 = Constants.Kernel.Get<IHardware>();
var hardware2 = Constants.Kernel.Get<IHardware>();
HardwareItems.Add(hardware1);
HardwareItems.Add(hardware2);
}
}
kernel
がヌルであるように上記初期化が失敗するユニットテスト
[TestClass]
public class ApplicanceViewModelTest
{
[TestMethod]
public void TestSomething()
{
//Arrange
var appliance = new ApplianceViewModel(); //This would fail to construct
}
}
。基本的には、クラスが一定で、カーネルに直接アクセスするのが悪いということです。
しかし、viewmodel
のコンストラクタを変更して、リストを初期化できる、つまりテスト可能にする方法はありますか?
ありがとうございます。
[service locator anti pattern](http://blog.ploeh)ではなくIoCをDIで使用する方がよいでしょうか。dk/2010/02/03/ServiceLocatorisanAnti-Pattern /)? – YuvShap
@SomeUser:はい、私はServiceLocatorのパターンが私を傷つけるものだと思いますが、私の心の質問はそれを書き直す方法でした。それから私は[この解決策](http://stackoverflow.com/questions/7816769/injecting-an-ienumerable-into-a-constructor-with-a-ninject-factory-method)を見つけました。私はこの問題を解決すると思います私は持っています。 – Marshal