Oracle 集成测试通过NUnit Gui/控制台失败,但通过IDE中的TestDriven

Oracle 集成测试通过NUnit Gui/控制台失败,但通过IDE中的TestDriven,oracle,nhibernate,nunit,testdriven.net,Oracle,Nhibernate,Nunit,Testdriven.net,我正在使用NHibernate对一个Oracle数据库使用NHibernate.Driver.OracleDataClientDriver驱动程序类。我有一个集成测试,当使用TestDriven.net通过IDE执行时,它可以正确地收回预期的数据。但是,当我通过NUnit GUI或控制台运行单元测试时,NHibernate抛出一个异常,表示它找不到Oracle.DataAccess程序集。显然,这会阻止我在CI过程中运行集成测试 NHibernate.hibernate异常: IDB命令和IDB

我正在使用NHibernate对一个Oracle数据库使用NHibernate.Driver.OracleDataClientDriver驱动程序类。我有一个集成测试,当使用TestDriven.net通过IDE执行时,它可以正确地收回预期的数据。但是,当我通过NUnit GUI或控制台运行单元测试时,NHibernate抛出一个异常,表示它找不到Oracle.DataAccess程序集。显然,这会阻止我在CI过程中运行集成测试

NHibernate.hibernate异常: IDB命令和IDB连接 大会的执行情况 找不到Oracle.DataAccess。 确保总成 Oracle.DataAccess位于中 应用程序目录或在全局 程序集缓存。如果程序集处于 GAC,使用 应用程序中的元素 配置文件以指定完整的 程序集的名称*

我尝试了两种方法使程序集可用,一种是将其复制到bin\debug文件夹,另一种是在配置文件中添加元素。同样,在IDE中通过TestDriven执行时,这两种方法都有效。当通过NUnit GUI/控制台执行时,两者都不起作用

NUnit Gui日志显示以下消息

21:42:26377错误[TestRunnerThread] ReflectHelper[null]-无法加载 类型 Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess。 System.BadImageFormatException:无法 不加载文件或程序集 'Oracle.DataAccess, 版本=2.111.7.20,区域性=中性, PublicKeyToken=89b483f429c47342'或 它的一个依赖项。企图 使其加载带有 格式不正确

文件名:'Oracle.DataAccess, 版本=2.111.7.20,区域性=中性, PublicKeyToken=89b483f429c47342'--> System.BadImageFormatException:无法 不加载文件或程序集 “Oracle.DataAccess”或其 依赖关系。有人试图 用不正确的代码加载程序 格式

文件名:“Oracle.DataAccess”

我在64位Windows 7上运行NUnit 2.4.8、TestDriven.net 2.24和VS2008sp1。Oracle数据提供程序v2.111.7.20,NHibernate v2.1.0.4

有没有人遇到过这个问题,更好的是,修复了它

斯莱,谢谢你的回复。然而,NUnit测试运行程序在测试时使用了正确的配置文件,从预期的配置文件中提取了一个已知值

我假设这与我的配置有关,特别是Windows 7的总体配置或64位版本。我继续在构建服务器W2k3服务器上安装/配置了Oracle客户端。我将测试转移到构建服务器上,并运行上述相同的场景,测试在所有情况下都按预期工作

接下来,我在另外两台开发人员工作站Win XP 32bit上运行了相同的场景,使用相同的工具集版本,测试在所有情况下都按预期进行


我很困惑,但现在很满意。我可以通过IDE运行集成测试,并可以通过我们的CI自动化在构建服务器上执行它们。现在唯一的问题是我无法在我的开发工作站上测试自动化构建项目。

我在配置NHibernate时遇到了类似的问题。问题是,大多数测试运行程序都使用与测试dll一起放置的app.config。但有些版本的NUnit没有。这就是为什么您的系统在测试中保持未配置状态的原因。您可以尝试通过测试手动配置NHibernate。希望有帮助

当我试图运行一个使用Oracle.DataAccess.dll odp.net 2.111.7.20版的应用程序时,遇到了这个错误。我将Oracle11g即时客户端与应用程序一起提供。在64位服务器上,它将失败。但是,我提供的客户端程序集是32位的,所以我编译了一个CPU标志设置为32位的应用程序版本,现在它可以正常工作了。这是因为当你明确告诉服务器应用程序是32位时,服务器在wow64模拟器中运行整个组件。

我可能刚刚解决了本地机器上的类似/相同问题,方法是进入测试项目的构建设置,并将平台目标从任何cpu更改为x86。谢谢,Tomo。这听起来很有趣。我听说一些奇怪的行为是通过显式设置32位编译器选项修复的。我会在接下来的几天里尝试这个,如果它有效的话,我会发表另一条评论。