从 NuGet 安装 NUnit 后,如何强制 TestDriven.Net 使用 NuGet 引用的 NUnit dll?

Posted

技术标签:

【中文标题】从 NuGet 安装 NUnit 后,如何强制 TestDriven.Net 使用 NuGet 引用的 NUnit dll?【英文标题】:After installing NUnit from NuGet, how do I force TestDriven.Net to use the NUnit dll referenced by NuGet? 【发布时间】:2011-05-05 00:30:46 【问题描述】:

我正在尝试设置一个 Visual Studio 解决方案来促进:

BDD

使用 SpecFlow http://www.specflow.org/

如 TekPub 上所述:http://tekpub.com/view/concepts/5

我想要:

保留所有引用和依赖项 在我的解决方案的根源下 目录结构

使用“测试”的能力 NUnit",右键单击时的命令 在我的 TestDriven.NET 项目中 提供。

我不想要:

使用 NUnit 的版本 TestDriven.NET 自行安装

我确实想要:

“使用 NUnit 测试”命令使用的版本 NuGet 安装在我的下的 NUnit 我的解决方案子目录

更多细节和我已经尝试过的:

当您安装 TestDriven.NET 时,它会将自己的 NUnit 版本放置在如下路径中:

\Program Files (x86)\TestDriven.NET 3\NUnit\2.5

当您使用 NuGet 安装最新版本的 NUnit 时,它会将 NUnit 放置在如下路径中:

Solution_root\packages\NUnit.2.5.10.11092

NuGet 会自动为您添加对 \packages\NUnit.2.5.10.11092\lib\nunit.framework.dll 的引用。如果您碰巧想使用 TD.Net 菜单轻松执行 NUnit 测试,那么该参考几乎毫无价值,因为 TD.Net 实际上并没有使用 NuGet 刚刚为您设置的 NUnit dll。

如何强制 TestDriven.Net 的菜单使用我的解决方案路径中引用的 NUnit dll,而不是它安装在 \Program Files (x86)\TestDriven.NET 3\NUnit\ 下的 NUnit dll?

如果这不可能,是否有一个简单的快捷键/菜单命令可以在不使用 TestDriven.Net 的情况下使用我的解决方案文件夹下的 NUnit 执行 SpecFlow 测试?

我为什么要这样做?

我使用 NuGet 安装了 NUnit,以便我可以将测试框架库保存在我的解决方案中并处于源代码控制之下。我需要能够在我的解决方案路径 (Solution_root\packages\NUnit.2.5.10.11092) 下引用 nunit.framework.dll 之类的东西,而不是从 (\Program Files (x86)\TestDriven.NET 3\NUnit\2.5) 引用它.

我已经尝试过这里的建议:

http://www.paraesthesia.com/archive/2010/05/03/how-to-run-a-different-nunit-version-with-testdriven.net.aspx

它似乎仍在启动 TestDriven.Net 的 NUnit 版本,而不是为我安装的 NuGet。

我也不想手动复制和替换 TD.Net 安装的 NUnit 文件,因为这不允许特定于解决方案的依赖文件和源代码控制下的隔离。

【问题讨论】:

如果这不可能,任何人都可以推荐一种方法:通过 NuGet 安装 xUnit.net、NUnit 或 MSTest,让 SpecFlow 使用安装在解决方案下的 NuGet 包,并简单地右键单击还是以接近自动的方式告诉 Visual Studio“立即运行所有这些测试”? 这不是这个确切问题的答案,但这是我现在一直在使用的解决方法:右键单击包含规范/测试的类库并选择属性。选择构建事件选项卡。在生成后事件命令行中添加: $(SolutionDir)\packages\NUnit.2.5.10.11092\tools\nunit.exe $(TargetPath) /run 将 \NUnit.2.5.10.11092\ 替换为安装在下的任何确切版本的 NuGet你的 sln运行构建后事件:成功构建。每次构建良好后,NUnit GUI 都会启动并运行 dll 中的测试。 【参考方案1】:

不确定这正是你所追求的,但这里是:

在 Visual Studio 下(我使用的是 2010):

    转到工具->选项->测试驱动->测试运行器 本部分列出了 TD.NET 附带的所有预配置测试运行器。 运行 Regedit。 转到:*HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MutantDesign\TestDriven.NET\TestRunners* 这在 32 位操作系统下会有所不同。

    添加一个新密钥 NUnit 2.5.X(只需复制另一个密钥并更改您需要的任何设置)。

    重新启动 Visual Studio。

    在第 1 步的菜单下,您会找到新的测试运行程序。 点击并保存。

从现在开始,您的测试将使用您配置的测试运行器运行。

【讨论】:

谢谢。我认为您的方法对于特定的 VS 解决方案可以很好地工作(我还没有尝试过),但是每次都必须为每个新的 VS 项目配置它(将注册表中的键/路径指向特定于 NUnit NuGet“包”目录下的文件,该目录位于每个 VS 解决方案下)。我正在寻找一种为任何/所有 VS 项目自动连接的方法。 注册表中的设置是每台机器全局的。 VS 从那里读取它并让您选择此选项。

以上是关于从 NuGet 安装 NUnit 后,如何强制 TestDriven.Net 使用 NuGet 引用的 NUnit dll?的主要内容,如果未能解决你的问题,请参考以下文章

VS2013 + Nunit 安装搭建

NUnit3 测试不在 TFS 构建上运行

我可以在安装 NuGet 包时添加这些 .dll 吗?

在 Rider 中为 .NET Core 运行 nUnit 测试

如何使用 NuGet 安装 JSON.NET?

nUnit 和 Azure - 如何从 nUnit 启动 Dev Fabric