あなたが所有していないクラス/オブジェクトをモックしないでください。この場合、メソッドを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
}
次に、必要な機能を模擬して、お好みのテストフレームワークでテストすることができます。
単体テストしたいメソッドを表示します。 – Yogi
@Yogiが更新されました。私はSetColumnsまたはWriteValuesメソッドをここに入れませんでした。なぜなら、この質問のためにはあまりにも細かいと思うからです。基本的には、このCellSetからデータを読み取り、データ列を作成し、datarowsに値を割り当てます。 – lastr2d2
'SetColumns'メソッドと' WriteValues'メソッドを表示できますか?彼らが使っている 'CellSet'のどのプロパティ/メソッドを見る必要があります。次に、抽象的なものを表示して、 'CellSet'クラスに直接結合しないようにします。 'Microsoft.AnalysisServices.AdomdClient'名前空間のクラスの大部分は封印されており、模擬/偽装することを非常に困難にするpublicコンストラクタは提供されていません。 – Nkosi