C# 如何模拟CellSet对象
我得到了一个转换为DataTable的方法。大概是这样的:C# 如何模拟CellSet对象,c#,unit-testing,adomd.net,C#,Unit Testing,Adomd.net,我得到了一个转换为DataTable的方法。大概是这样的: public DataTable ConvertCellSetToDataTable(CellSet cellSet) { if (cellSet == null) { return null; } var dataTable = new DataTable(); SetColumns(cellSet, dataTable); WriteValues(cellSet, d
public DataTable ConvertCellSetToDataTable(CellSet cellSet)
{
if (cellSet == null)
{
return null;
}
var dataTable = new DataTable();
SetColumns(cellSet, dataTable);
WriteValues(cellSet, dataTable);
return dataTable;
}
现在我想为这个方法编写单元测试。通常我会使用new来创建实例,但这次我没有看到这个类的任何公共构造函数方法
那么,我还能做什么呢
Mocks是我对单元测试框架的选择。您不应该模拟您不拥有的类/对象。在这种情况下,由于您将方法耦合到
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 Updated。我没有将方法SetColumns或WriteValues放在这里,因为我认为它对于这个问题来说太详细了。基本上,他们从这个单元集中读取数据,构建数据列,并为数据行赋值……你能展示
SetColumns
和WriteValues
方法吗。需要查看他们使用的CellSet
的哪些属性/方法。然后我可以向您展示要抽象的内容,这样您就不会直接耦合到CellSet
类。Microsoft.AnalysisServices.AdomdClient
命名空间中的大多数类都是密封的,不提供公共构造函数,这使得它们很难模拟/伪造。