2016-06-26 14 views
1

インタフェースの明示的なキャストエラーのためにユニットテストに問題があります。このための解決策があるかどうかはわかりませんが、私の特定のシナリオではまだ十分に明確なものは見つかりませんでした。ユニットテスト明示的なキャストエラーがインタフェース

私のコンストラクタでは、データモデルの汎用インターフェースを渡します。その後、私はIdatamodelを私の特定の実装に明示的にキャストします。これは、私の単体テストで実行時に実行されません。

 public EventFinder(IEventFinder Successor, 
            IAssetDataModel theAssetDataModel, 
            IAssetEventHandler theEventHandler) 
     : base(Successor, theAssetDataModel, theEventHandler) 
    { 
    } 

//later on in the I call this cast to reference the model and method I need 
       Listofstuff = ((IMyOtherDataModel)_AssetDataModel).GetListofStuff(); 

私の単体テストでエラーが発生します。私はこのメソッドのスタブを持っていますが、それは実行時に明示的なキャストに失敗し、私はまだなぜか少し混乱しています。私はユニットテストでこのモデルのスタブを作成したが、それはまだ私はいくつかの掘削をした

  var stub_my_Data_model = new StubImyAssetDataModel(); 
     stub_my_Data_model.Getstuff =() => 
      { 
       List<string> results = new List<string>(); 
       results.Add("test1"); 
       return results; 
      }; 
+3

おそらく* IMyOtherDataModelではないと思われるものを渡しているので、キャストは失敗します。なぜあなたはそれが動作すると思いますか?さらに重要なのは、後で 'IMyOtherDataModel'でなければならないと仮定すれば、コンストラクタは' IAssetDataModel'だけを取るのですか? –

+0

お返事ありがとうございます。私はそれが変だと思っていますが、私はまだそれを回避するのに苦労しており、私は解決策があることを知っています。 IAssetDataModelは、他のすべてのデータモデルが継承するインタフェースです。これはそれを呼び出すメソッドに柔軟性を与えます。他のメソッドの継承のためMyDataModelを渡すことはできません。再度お返事ありがとうございます – Momthemeatloaf

+0

あなたは本当に発信者に柔軟性を与えるわけではありません。あなたは柔軟性の錯覚を与えています。 「本当に必要なデータモデルを私に渡さないと失敗する前に、後ほど待つだけです」と言っている。実際には使用できない価値を受け入れるのはなぜですか? –

答えて

0

失敗し、答えはちょうどインターフェイスから派生テストクラス内のデータモデルの実装を作成することです。

public class TestDataModel : IMyInterface{} 
関連する問題