你不應該模擬你不擁有的類/對象。在這種情況下,因爲您將方法耦合到CellSet
,您現在直接依賴該方法。
Microsoft.AnalysisServices.AdomdClient
命名空間中的大多數類都是密封的,並且沒有提供公共構造函數,這使得它們很難模擬/僞造。
查看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中讀取數據並構建數據列併爲數據行分配值... – lastr2d2
您可以顯示'SetColumns'和'WriteValues'方法。需要查看它們使用的「CellSet」的屬性/方法。然後,我可以向您展示要抽象的內容,以便您不直接耦合到「CellSet」類。 「Microsoft.AnalysisServices.AdomdClient」命名空間中的大多數類都是密封的,並且不提供公共構造函數,這使得它們很難模擬/僞造。 – Nkosi