gpt4 book ai didi

c# - 引用其他 DLL 的 NUnit C# 测试项目

转载 作者:太空狗 更新时间:2023-10-29 21:35:52 25 4
gpt4 key购买 nike

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

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

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

我引用了另外 2 个项目,它们都是 dll 项目。这意味着我有 3 个项目:TestProject (DLL)、SettingsManager(DLL)、DatabaseInterface (DLL)。所有都在一个解决方案中。 DatabaseInterface 项目包含对另一个 C++ x86、DLL 的 native API 调用,但未通过“using”语句显式引用此 DLL。

两者之一是 SettingsManager,存储一些配置数据,如路径等,但无论如何。 Testproject 和 DatabaseInterface 都引用了 SettingsManager。

所有 3 个项目都在“调试”和“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):设置:System.BadImageFormatException:死于程序集“DatabaseInterface,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或未找到引用。它试图加载格式错误的文件。”

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

我正在使用标准的 *.config 文件,例如 NUnit 测试项目之一。也许有些人对此有误。

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

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

最佳答案

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

关于c# - 引用其他 DLL 的 NUnit C# 测试项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8213352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com