c#和Microsoft Fakes中lambda表达式中的引用形参

本文关键字:引用 形参 表达式 lambda Microsoft Fakes | 更新日期: 2023-09-27 18:17:06

我是Microsoft Fakes框架的新手,正在尝试加载一些标准的旧ADO。. NET代码绕过数据库连接完全为我的单元测试。我已经成功地装载了SqlConnection, SqlCommand和SqlDataAdapter(通过DbDataAdapter),并试图在数据适配器上填充(数据集)方法。在我的假填充运行之后,一切似乎都工作得很好,它手动向数据集添加一个表,测试中的代码似乎看不到我创建的数据集。这就好像数据集对象是通过值传递的,而不是通过引用传递的。

下面是测试中的代码(VB.NET):
Dim cn As New SqlConnection(DB("CIMS"))
Dim cmd As New SqlCommand
Dim ds As New DataSet
...
Dim da as New SqlDataAdapter(cmd)
da.Fill(ds)

下面是单元测试(c#):

using (ShimsContext.Create())
{
    // arrange
     ShimSqlConnection.ConstructorString = (@this, connectionString) => new ShimSqlConnection();
    ShimSqlCommand.Constructor = (@this) => new ShimSqlCommand();
    ShimSqlConnection.AllInstances.Open = (@this) => { };
    ShimSqlConnection.AllInstances.Close = (@this) => { };
    ShimDbDataAdapter.AllInstances.FillDataSet = (DbDataAdapter @this, DataSet dataset) =>
    {
        dataset = new System.Data.DataSet();
        dataset.Tables.Add();
        return 0;
    };
...

调试此测试时,代码流进入伪FillDataSet函数,数据集添加了表,但退出该函数后,ds引用的数据集在表集合中显示0个表。我还尝试设置DataSetName属性,它在测试表达式中由测试下的代码获取,从未看到新名称。

目前,将整个应用程序大规模转换为更现代的数据访问技术是不现实的。

c#和Microsoft Fakes中lambda表达式中的引用形参

我不再需要这个问题的答案了。我从我的假填充方法(. fakedataset)中删除了dataset = new System.Data.DataSet()行,一切都很好。我猜我是用一个新的数据集覆盖了通过引用传递的数据集,正如预期的那样,调用代码无法访问。