spl*_*tto 7 nunit unit-testing 32bit-64bit
我有一个MVC 3.0应用程序.我的测试框架是nUnit 2.4.8.0.我在32位机器上启动了这个代码,最近开始使用64位机器.我刚刚将项目升级到.NET 4.0.
我的应用程序运行正常 - 我能够适当地从数据库中保存我的对象.问题是当我运行集成测试时.
测试失败了,并给出了我以前从未见过的例外:
NHibernate.ADOException : cannot open connection
----> System.BadImageFormatException : An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了这个异常 - 它当然是nUnit的问题,尽管有NHibernate异常(请记住,NHibernate允许我在运行应用程序时保持对象并保持对象).
我将我的nUnit程序集升级到最新版本2.5.10,并将项目中的引用更新为nUnit zip文件的'net-2.0'文件夹下的程序集.我再次运行测试,并收到相同的异常.
似乎程序集,代码和ASP.NET开发服务器之间存在某种32位与64位冲突.
我没有任何处理32位和64位问题的经验,所以我不知道堆栈溢出是否还有其他问题是相关的(我看到的那些似乎不是).我有一些想法,但没有答案:
不幸的是,我目前还没有32位机器来测试代码.上述任何问题是否正确解决这个问题?你能提供任何指导吗?
谢谢.
更新: 我真的希望能够使用TestDriven.NET从Visual Studio中运行测试.我不想开始使用nunit UI来运行我的测试.
更新2: 对不起,我可能不太清楚.我还没有使用TestDriven.NET,我说的是我希望使用它,但我还没有在新的x64机器上安装它.此时,我正在尝试通过单击Visual Studio IDE中的可视图标来运行测试,如下图所示:

完成该操作后,测试失败,弹出的对话框显示以下内容:

这是我上面引用的例外.没有引用未加载的程序集.
起初我不相信我使用的NHibernate版本(2.0.1.4000)很重要; 我这样说是因为提供程序能够在运行应用程序时从数据库返回所需的对象.但是,当我调试测试时,我发现我的提供程序中抛出了异常.挖掘一下,看来这是我的SQLite程序集的来源.但同样,这是在我运行项目时运行的同一个程序集 - 为什么在运行集成测试时它不起作用?

这是我经常遇到的问题。
System.Data.SQLite 是一个 32 或 64 位特定程序集,因为它将 SQLite 的本机映像捆绑在 DLL 内。NUnit 测试运行程序试图以错误的模式运行它,即 32 位测试运行程序中的 64 位程序集,并且当它尝试对 SQLite C API 进行本机调用时,它会崩溃。Windows 无法做到这一点。
我建议您在 32 位或 64 位(即您的开发环境和部署环境)上的所有平台上进行标准化。
一种中间修复方法是将 SQLite DLL 替换为 64 位 DLL,可从此处获取:http: //system.data.sqlite.org/。然而,这可能会在部署时中断,此时您需要为您的实时环境创建一个构建配置,该配置提供正确的 DLL 版本(32/64 位)。
让 NUnit 在 32 位或 64 位模式下确定性地运行是一件痛苦的事情,所以我个人不会为此烦恼。
| 归档时间: |
|
| 查看次数: |
4143 次 |
| 最近记录: |