NUnit C#Test Project引用其他DLL

时间:2011-11-21 14:27:11

标签: c# .net visual-studio nunit

我浏览了stackoverflow上陈述的几个nunit和visual studio问题,但找不到我的情况适合的任何线程。

我正在使用NUnit来测试我编写的一些代码,我正在将我的testproject的* .csproj文件加载到NUnit GUI工具中。

我想出了我猜的问题,但到目前为止我没有解决方案。 我在做什么:

我引用其他两个项目都是dll项目。 这意味着我有3个项目:TestProject(DLL),SettingsManager(DLL),DatabaseInterface(DLL)。所有都在一个解决方案。 DatabaseInterface项目包含对另一个C ++ x86,DLL的本机api调用,但没有通过“using”语句显式引用此DLL。

其中一个是SettingsManager,存储一些配置数据,如路径和放大器。等等,但无论如何。 Testproject和DatabaseInterface都引用了SettingsManager。

所有3个项目都在“Debug”和“AnyCPU”下构建。参考&在我的TestProject中只使用SettingsManager工作正常但是当我添加DatabaseInterface时,我得到一个BadImageFormatException告诉我它正在尝试加载格式错误的文件。

为了让它更加明显,那就是:

using myNamespace.Settings; // contains SettingsManager
using System;
using NUnit.Framework;

namespace myNamespace.myTestProject
{
    [TestFixture]
    public class TestProject
    {
        [SetUp]
        public void SetUp()
        {

        }

        [Test]
        public void ReadDbFile()
        {
            string s = SettingsManager.DbFile; // gets the path of the db file
        }
    }
}

NUnit输出:

这不起作用:

using myNamespace.Settings; // contains SettingsManager
using myNamespace.DbInterface; // contains DatabaseInterface, which contains native calls to C++ dll
using System;
using NUnit.Framework;

namespace myNamespace.myTestProject
{
    [TestFixture]
    public class TestProject
    {
        DatabaseInterface instance = null;
        [SetUp]
        public void SetUp()
        {

        }

        [Test]
        public void ReadDbFile()
        {
            string s = SettingsManager.DbFile; // gets the path of the db file
        }
    }
}

第二次尝试,包含

using myNamespace.DbInterface;

抛出一个 的 myNamespace.myTestProject.TestProject(TestFixtureSetUp): SetUp:System.BadImageFormatException:Die Datei oder Assembly“DatabaseInterface,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或找不到引用。它试图加载错误格式的文件。“

即使所有3个项目都是使用 Debug AnyCPU 构建的。

我正在使用标准的* .config文件,就像NUnit Testproject一样。也许有些人错了。

到目前为止,有没有人遇到同样的错误,试图从另一个DLL加载代码? 两个项目(测试和数据库)是否引用SettingsManager DLL都是一个问题? 我做了一件大错的事吗?

我在所有3个项目中仔细检查了我的构建配置,但无法找到任何可能错误的设置,并解释了 BadImageFormatException

2 个答案:

答案 0 :(得分:5)

您可能正在使用针对Any CPU的nunit.exe GUI运行器。它将被JIT编译到目标平台,我认为这是x64,因为你遇到了这个问题。相反,请尝试使用nunit-x86.exe来运行测试。此版本的GUI运行程序专门用于在32位进程中运行,该进程将与您的DatabaseInterface库依赖项兼容。

答案 1 :(得分:1)

这可能是依赖项依赖性的问题。如果您的依赖项依赖于x86的COM非托管库并且您在x64上运行,则可能会发生这种情况。一切都运行良好,直到你尝试在代码中使用该依赖 - 它将抛出BadImageFormatException

要解决此问题,您必须为项目添加特定目标(x86或x64),并尝试使用它。