gpt4 book ai didi

c# - 如何模拟 CellSet 对象

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:32 25 4
gpt4 key购买 nike

我有一个方法可以转换 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)构造方法。

所以,无论如何我可以

  1. 模拟一个 CellSet 对象
  2. 并修改它的属性,例如 Axes?

Rhino.Mocks 是我选择的单元测试框架。

最佳答案

你不应该模拟你不拥有的类/对象。在这种情况下,因为您将方法耦合到 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
}

然后您可以模拟所需的功能,以便使用您选择的测试框架测试您的方法。

关于c# - 如何模拟 CellSet 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36739190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com