使用DbProviderFactory的Oracle对象的单元测试中的System.InvalidCastException

时间:2014-02-06 00:48:07

标签: c# oracle ado.net nunit odac

使用System.Data.Common.DbProviderFactory时,我们在NUnit测试中运行代码时会出现此错误,但在运行常规Web应用程序时则不会。

错误

  

System.InvalidCastException:   [A] Oracle.DataAccess.Client.OracleParameter无法强制转换为   [B] Oracle.DataAccess.Client.OracleParameter。 A型起源于   'Oracle.DataAccess,Version = 2.112.1.2,Culture = neutral,   PublicKeyToken = 89b483f429c47342'在上下文'默认'位置   'C:\ WINDOWS \装配\ GAC_32 \ Oracle.DataAccess \ 2.112.1.2__89b483f429c47342 \ Oracle.DataAccess.dll'。   类型B源自'Oracle.DataAccess,Version = 4.112.1.2,   在上下文中,Culture = neutral,PublicKeyToken = 89b483f429c47342'   位置处的“默认”   'C:\的Windows \ Microsoft.Net \组件\ GAC_32 \ Oracle.DataAccess \ v4.0_4.112.1.2__89b483f429c47342 \ Oracle.DataAccess.dll'。

我们有单元测试项目引用的2.112.1.2程序集,我们甚至尝试'使用特定版本'和'复制本地',但它只是没有看到它继续从GAC中的较新版本加载DLL

1 个答案:

答案 0 :(得分:0)

原来不会将dll复制到测试运行器的执行文件夹中。幸运的是,您可以指定加载GAC的特定dll。

我们将其添加到单元测试项目中的app.config中。 注意 <add />元素

的type属性中的特定程序集版本
<system.data>
    <DbProviderFactories>
      <clear />
      <add name="Oracle Data Provider" invariant="Oracle.DataAccess.Client" 
           description=".Net Framework Data Provider for Oracle" 
           type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
</system.data>