我正在对带有 NHibernate.Driver.OracleDataClientDriver 驱动程序类的 Oracle 数据库使用 NHibernate。我有一个集成测试,当使用 TestDriven.net 通过 IDE 执行时,它可以正确拉回预期数据。但是,当我通过 NUnit GUI 或控制台运行单元测试时,NHibernate 会抛出一个异常,说它找不到 Oracle.DataAccess 程序集。显然,这会阻止我将集成测试作为 CI 流程的一部分运行。
NHibernate.HibernateException : 找不到程序集 Oracle.DataAccess 中的 IDbCommand 和 IDbConnection 实现。确保程序集 Oracle.DataAccess 位于应用程序目录或全局程序集缓存中。如果程序集在 GAC 中,请使用应用程序配置文件中的元素来指定程序集的全名。*
我尝试通过两种方式使程序集可用,将其复制到 bin\debug 文件夹中并在配置文件中添加元素。同样,当通过 IDE 中的 TestDriven 执行时,这两种方法都有效。通过 NUnit GUI/Console 执行时都不起作用。
NUnit Gui 日志显示以下消息。
21:42:26,377 错误 [TestRunnerThread] ReflectHelper [(null)]- 无法加载类型 Oracle.DataAccess.Client.OracleConnection、Oracle.DataAccess。System.BadImageFormatException:无法加载文件或程序集“Oracle.DataAccess,版本=2.111.7.20,Culture=neutral,PublicKeyToken=89b483f429c47342”或其依赖项之一。试图加载格式不正确的程序。
文件名:“Oracle.DataAccess,版本=2.111.7.20,Culture=neutral,PublicKeyToken=89b483f429c47342”---> System.BadImageFormatException:无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。试图加载格式不正确的程序。
文件名:“Oracle.DataAccess”
我在 Windows 7 64 位上运行 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 32 位)上运行场景来跟踪这一点,并且测试在所有情况下都按预期工作。
我很困惑,但现在很满意。我可以通过 IDE 运行我的集成测试,也可以通过我们的 CI 自动化在构建服务器上执行它们。现在唯一的问题是我无法在我的开发工作站上测试自动化构建项目。