Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MS Fake填充ExecuteReader_C#_Microsoft Fakes_Shim - Fatal编程技术网

C# 如何使用MS Fake填充ExecuteReader

C# 如何使用MS Fake填充ExecuteReader,c#,microsoft-fakes,shim,C#,Microsoft Fakes,Shim,我正在尝试测试下面的方法,但使用(var reader=command.ExecuteReader())连接必须打开且可用时,在第行中出现错误。我无法填充此方法并返回假读取器 测试方法 public EmailTemplateFilterModel[] GetEmailTemplateFilters() { var filterList = new List<EmailTemplateFilterModel>();

我正在尝试测试下面的方法,但使用(var reader=command.ExecuteReader())连接必须打开且可用时,在第
行中出现错误。我无法填充此方法并返回假读取器

测试方法

 public EmailTemplateFilterModel[] GetEmailTemplateFilters()
        {
            var filterList = new List<EmailTemplateFilterModel>();

            using (var connection = new SqlConnection(_clientConnString))
            using (var command = connection.CreateCommand("cspGetInvoiceTemplateFilterCollections"))
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();

                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var filter = new EmailTemplateFilterModel
                        {
                            ParmId = (int)reader["InvoiceEmailMapParmId"],
                            ParmName = (string)reader["ParmName"],
                            DatabaseDataType = (string)reader["DbDataType"],
                            ControlType = (string)reader["ControlType"],
                            StoredValue = (string)reader["StoredValue"],
                            DisplayedValue = (string)reader["DisplayedValue"]
                        };

                        filterList.Add(filter);
                    }
                }
            }
            return filterList.ToArray();
        }
public-EmailTemplateFilterModel[]GetEmailTemplateFilters()
{
var filterList=新列表();
使用(var connection=newsqlconnection(_clientConnString))
使用(var命令=connection.CreateCommand(“cspGetInvoiceTemplateFilterCollections”))
{
if(connection.State!=ConnectionState.Open)
connection.Open();
使用(var reader=command.ExecuteReader())
{
while(reader.Read())
{
var filter=新的EmailTemplateFilterModel
{
ParmId=(int)读取器[“InvoiceEmailMapParmId”],
ParmName=(字符串)读取器[“ParmName”],
DatabaseDataType=(字符串)读取器[“DbDataType”],
ControlType=(字符串)读取器[“ControlType”],
StoredValue=(字符串)读取器[“StoredValue”],
DisplayedValue=(字符串)读取器[“DisplayedValue”]
};
filterList.Add(过滤器);
}
}
}
返回filterList.ToArray();
}
单元测试

 [Test()]
        public void GetEmailTemplateFiltersTest()
        {
            using (ShimsContext.Create())
            {
                var rowCounter = 0;

                //ARRANGE
                ShimSqlConnection.AllInstances.Open = (sender) => { };
                ShimSqlConnection.AllInstances.StateGet = (sender) => { return ConnectionState.Open; };
                //ShimSqlCommand.AllInstances.ExecuteReader = (sender) => new Mock<SqlDataReader>().Object;

                ShimSqlDataReader.ConstructorSqlCommandCommandBehavior = (@this, p1, p2) =>
                {
                    var shim = new ShimSqlDataReader(@this)
                    {

                        // ValueGet = () => -5
                    };
                };


                ShimSqlDataReader.AllInstances.Read = (sender) =>
                {
                    rowCounter++;
                    return rowCounter <= 2;
                };

                ShimSqlDataReader.AllInstances.ItemGetString = (sender, coloumnName) =>
                {
                    if (rowCounter == 1)
                    {
                        switch (coloumnName)
                        {
                            case "InvoiceEmailMapParmId":
                                return 1;
                            case "ParmName":
                                return "Param1";
                            default:
                                return "SomeStrigValue";
                        }
                    }
                    else if (rowCounter == 2)
                    {
                        switch (coloumnName)
                        {
                            case "InvoiceEmailMapParmId":
                                return 1;
                            case "ParmName":
                                return "Param1";
                            default:
                                return "SomeStrigValue";
                        }
                    }
                    else
                    {
                        return string.Empty;
                    }
                };

                //ACT
                var filterList = _sut.GetEmailTemplateFilters();

                //ASSERT
                Assert.That(filterList.Length, Is.EqualTo(rowCounter));

            }
        }
[Test()]
public void GetEmailTemplateFiltersTest()
{
使用(ShimsContext.Create())
{
var rowCounter=0;
//安排
ShimSqlConnection.AllInstances.Open=(发送方)=>{};
ShimSqlConnection.AllInstances.StateGet=(发送方)=>{return ConnectionState.Open;};
//ShimSqlCommand.AllInstances.ExecuteReader=(发送方)=>newmock().Object;
ShimSqlDataReader.ConstructorSqlCommandBehavior=(@this,p1,p2)=>
{
var shim=new-ShimSqlDataReader(@this)
{
//ValueGet=()=>-5
};
};
ShimSqlDataReader.AllInstances.Read=(发送方)=>
{
行计数器++;
回程计数器
{
如果(行计数器==1)
{
开关(柱廊名称)
{
案例“InvoiceEmailMapParmId”:
返回1;
案例“ParmName”:
返回“Param1”;
违约:
返回“sometrigValue”;
}
}
else if(行计数器==2)
{
开关(柱廊名称)
{
案例“InvoiceEmailMapParmId”:
返回1;
案例“ParmName”:
返回“Param1”;
违约:
返回“sometrigValue”;
}
}
其他的
{
返回字符串。空;
}
};
//表演
var filterList=_sut.GetEmailTemplateFilters();
//断言
Assert.That(filterList.Length,Is.EqualTo(rowCounter));
}
}
[Test()]
public void GetEmailTemplateFiltersTest()
{
使用(ShimsContext.Create())
{
#区域排列
var rowCounter=0;
ShimSqlConnection.AllInstances.Open=(发送方)=>{};
ShimSqlConnection.AllInstances.StateGet=(发送方)=>ConnectionState.Open;
ShimSqlCommand.AllInstances.ExecuteReader=(发送方)=>new-ShimSqlDataReader();
ShimDbDataReader.AllInstances.Dispose=(发送方)=>{};
ShimDbDataReader.AllInstances.DisposeBoolean=(发送方,p1)=>{};
ShimSqlDataReader.AllInstances.Read=(发送方)=>
{
行计数器++;
回程计数器
{
如果(行计数器==1)
{
开关(柱廊名称)
{
案例“InvoiceEmailMapParmId”:
返回1;
案例“ParmName”:
返回“Param1”;
违约:
返回“sometrigValue”;
}
}
else if(行计数器==2)
{
开关(柱廊名称)
{
案例“InvoiceEmailMapParmId”:
返回1;
案例“ParmName”:
返回“Param1”;
违约:
返回“sometrigValue”;
}
}
其他的
{
返回字符串。空;
}
}; 
#端区
//表演
var filterList=_sut.GetEmailTemplateFilters();
//断言
Assert.That(filterList.Length,Is.EqualTo(2));
}
}
  [Test()]
        public void GetEmailTemplateFiltersTest()
        {
            using (ShimsContext.Create())
            {
                #region ARRANGE
                var rowCounter = 0;

                ShimSqlConnection.AllInstances.Open = (sender) => { };
                ShimSqlConnection.AllInstances.StateGet = (sender) => ConnectionState.Open;
                ShimSqlCommand.AllInstances.ExecuteReader = (sender) => new ShimSqlDataReader();
                ShimDbDataReader.AllInstances.Dispose = (sender) => { };
                ShimDbDataReader.AllInstances.DisposeBoolean = (sender, p1) => { };

                ShimSqlDataReader.AllInstances.Read = (sender) =>
                {
                    rowCounter++;
                    return rowCounter <= 2;
                };

                ShimSqlDataReader.AllInstances.ItemGetString = (sender, coloumnName) =>
                {
                    if (rowCounter == 1)
                    {
                        switch (coloumnName)
                        {
                            case "InvoiceEmailMapParmId":
                                return 1;
                            case "ParmName":
                                return "Param1";
                            default:
                                return "SomeStrigValue";
                        }
                    }
                    else if (rowCounter == 2)
                    {
                        switch (coloumnName)
                        {
                            case "InvoiceEmailMapParmId":
                                return 1;
                            case "ParmName":
                                return "Param1";
                            default:
                                return "SomeStrigValue";
                        }
                    }
                    else
                    {
                        return string.Empty;
                    }
                }; 
                #endregion

                //ACT
                var filterList = _sut.GetEmailTemplateFilters();

                //ASSERT
                Assert.That(filterList.Length, Is.EqualTo(2));

            }
        }