私は答えを見つけようとしていましたが、直接議論されていないようです。 DIコンテナを作成してそこにすべて登録し、すべての依存関係を取得する必要なトップレベルクラスを解決するアプリケーションのコンポジションルートがあります。これはすべて内部的に起こっているため、構成ルートを単体テストすることは難しくなります。あなたは仮想メソッドや保護されたフィールドなどを行うことができますが、私は単体テストにできるように、そのようなものを導入することについて大きなファンではありません。コンストラクタインジェクションを使うので、他のクラスに大きな問題はありません。だから質問は - それは構成ルートを全くテストするのが大変意味がありますか?それにはいくつかの追加ロジックがありますが、それほど多くはありません。ほとんどの場合、アプリケーションの起動中にポップアップが発生します。私が持っている いくつかのコード:コンポジションルートにユニットテストが必要ですか?
public void Initialize(/*Some configuration parameters here*/)
{
m_Container = new UnityContainer();
/*Regestering dependencies*/
m_Distributor = m_Container.Resolve<ISimpleFeedMessageDistributor>();
}
public void Start()
{
if (m_Distributor == null)
{
throw new ApplicationException("Initialize should be called before start");
}
m_Distributor.Start();
}
public void Close()
{
if (m_Distributor != null)
{
m_Distributor.Close();
}
}
ここで正確に何をテストしますか?コンポジションルートは、アプリケーションプラットフォームへのフックです。すべてのインフラストラクチャコードを模擬する簡単な方法は見つけられません。 –
例えば、入ってくる設定が適切に解析され、m_Distributor.Start()などの呼び出しが開始されることをテストしたいとします。だから、これが多く必要なのかどうかはわかりません... –
設定にXMLファイルを使用していますか?すべてのコンテナの設定をインストーラに移すことができますか(インストーラはCastle Windsorにあり、Ninjectのモジュールと呼ばれます)クラスですか?私はUnityを一度も使用しなかった。 –