2016-04-20 8 views
2

CellSetをDataTableに変換するメソッドがあります。このようなもの:CellSetオブジェクトをモックする方法

public DataTable ConvertCellSetToDataTable(CellSet cellSet) 
{ 
    if (cellSet == null) 
    { 
     return null; 
    } 

    var dataTable = new DataTable(); 
    SetColumns(cellSet, dataTable); 
    WriteValues(cellSet, dataTable); 
    return dataTable; 
} 

このメソッドの単体テストを書きたいと思います。通常、インスタンスを作成するのにnewを使用しますが、今回はこのクラスのpublicコンストラクタメソッドが表示されません。だから、

、とにかく私はモックCellSetを対象

    1. をすることができますし、それは、そのような軸としての特性、だ変更がありますか?

    Rhino.Mocksは単体テストフレームワークのための私の選択です。

  • +0

    単体テストしたいメソッドを表示します。 – Yogi

    +0

    @Yogiが更新されました。私はSetColumnsまたはWriteValuesメソッドをここに入れませんでした。なぜなら、この質問のためにはあまりにも細かいと思うからです。基本的には、このCellSetからデータを読み取り、データ列を作成し、datarowsに値を割り当てます。 – lastr2d2

    +0

    'SetColumns'メソッドと' WriteValues'メソッドを表示できますか?彼らが使っている 'CellSet'のどのプロパティ/メソッドを見る必要があります。次に、抽象的なものを表示して、 'CellSet'クラスに直接結合しないようにします。 'Microsoft.AnalysisServices.AdomdClient'名前空間のクラスの大部分は封印されており、模擬/偽装することを非常に困難にするpublicコンストラクタは提供されていません。 – Nkosi

    答えて

    1

    あなたが所有していないクラス/オブジェクトをモックしないでください。この場合、メソッドをCellSetに結合しているため、これに直接依存しています。

    Microsoft.AnalysisServices.AdomdClient名前空間内のクラスの大部分は封印されており、模擬/偽装することを非常に困難にするpublicコンストラクタは提供されていません。

    CellSetクラスを確認し、そこからどのような機能が必要かを判断します。必要なプロパティ/メソッドを抽出し、制御できるサービスの背後で抽象化するものを決定します。

    ここでは、私が説明した内容の簡単な例を示します。

    public class MyClassUnderTest { 
        public DataTable ConvertCellSetToDataTable(ICellSetWrapper cellSet) { 
         if (cellSet == null) { 
          return null; 
         } 
    
         var dataTable = new DataTable(); 
         SetColumns(cellSet, dataTable); 
         WriteValues(cellSet, dataTable); 
         return dataTable; 
        } 
    
        private void WriteValues(ICellSetWrapper cellSet, DataTable dataTable) { 
         //...assign value to datarows 
        } 
    
        private void SetColumns(ICellSetWrapper cellSet, DataTable dataTable) { 
         //...read data from this CellSet and build data columns 
        } 
    } 
    
    public interface ICellSetWrapper { 
        //...Methods and propeties exposing what you want to use 
    } 
    
    public class MyCellSetWrapper : ICellSetWrapper { 
        CellSet cellSet; 
        public MyCellSetWrapper(CellSet cellSet) { 
         this.cellSet = cellSet; 
        } 
        //...Implemented methods/properties 
    } 
    

    次に、必要な機能を模擬して、お好みのテストフレームワークでテストすることができます。

    +1

    これは、これを行う唯一の方法です..ありがとう.. – lastr2d2

    関連する問題