【问题标题】:Cannote generate shim for System.Data.SqlClient.SqlDataReaderSmi无法为 System.Data.SqlClient.SqlDataReader mi 生成 shim
【发布时间】:2016-06-22 23:47:02
【问题描述】:

这是错误:“无法为 System.Data.SqlClient.SqlDataReaderSmi 生成填充程序:类型现在对导出或程序集可见 (System.Data.4.0.0.0.Fakes)。

这是我的代码:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="System.Data" Version="4.0.0.0"/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Remove FullName="System.Data.SqlClient"/>
    <!--Added Classes-->
    <Add FullName="System.Data.SqlClient.SqlCommand!"/>
    <Add FullName="System.Data.SqlClient.SqlConnection!"/>
    <Add FullName="System.Data.SqlClient.SqlDataRead"/>
  </ShimGeneration>
</Fakes>

在我的单元测试中,我像这样模拟 SqlDataReader:

var statReqReader = new ShimSqlDataReader()
        {
            Read = () =>
            {
                if (dsrIndexCounter < testCaseCount)
                {
                    dsrIndexCounter++;
                    return true;
                }
                return false;
            },
            ItemGetString = (val) =>
            {
                // [] operator
                return dtStatReq.Rows[dsrIndexCounter - 1][val];
            }
        };

一般来说,我需要在单元测试中使用 Fakes。当我尝试删除 Fakes 文件中有关 SqlDataReader 的以下行时

<Add FullName="System.Data.SqlClient.SqlDataRead"/>

我收到以下错误:

“找不到类型或命名空间名称'ShimSqlDataReader'(您是否缺少 using 指令或程序集引用?)

我模拟了 SqlDataReader,需要使用 Fakes。我做错了什么?

【问题讨论】:

  • 为什么?您已经拥有可以使用的接口和抽象基类。
  • 什么是“SqlDataReaderSmi”?
  • @JonathanAllen 我已更新问题以更详细地介绍。

标签: c# sql asp.net-mvc unit-testing microsoft-fakes


【解决方案1】:

我发现了我的问题。这是消除错误的原因。

1.我添加了一个示例模拟函数来查看 SqlDataReader 的 Shim 类。找到它后,我意识到我在 Fakes 文件中写的名字已经足够具体了。

2.用下面的代码行替换最后的添加解决了这个问题。

<Add FullName="System.Data.SqlClient.SqlDataReader!"/>

【讨论】:

    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多