【问题标题】:ReSharper Unit Test not run in bin directoryReSharper 单元测试未在 bin 目录中运行
【发布时间】:2016-07-13 08:42:01
【问题描述】:

序言

我知道,这个问题似乎有答案:

我遇到了与ReSharper 10 test runner failing to find AppSettings referenced from external file 几乎相同的问题。 但是这些答案表明,ReSharper 10.0.2 应该可以解决问题

问题

我包含了一个带有自定义设置的custom.xml 文件,我需要从我的单元测试中读取它们。但是找不到我的文件。

我查看了进程运行的位置,并包含了这一行

var curdir = Directory.GetCurrentDirectory();

所以我发现curdir 是C:\\Users\\MYUSER\\AppData\\Local\\JetBrains\\Installations\\ReSharperPlatformVs11_000

现在很明显我的文件找不到了。谷歌搜索后,它发现了上面提到的问题。但是这些解决方案都不适合我。

这些是我的设置:

Visual Studio 配置

Microsoft Visual Studio Ultimate 2012

版本 11.0.61219.00 更新 5

微软 .NET 框架

版本 4.6.01038

安装版本:终极版

  • 架构和建模工具 04940-004-0038003-02857
  • Team Explorer für Visual Studio 2012 04940-004-0038003-02857
  • Microsoft Team Explorer für Visual Studio 2012
  • Visual Basic 2012 04940-004-0038003-02857
  • Microsoft Visual Basic 2012
  • Visual C# 2012 04940-004-0038003-02857
  • Microsoft Visual C# 2012
  • Visual C++ 2012 04940-004-0038003-02857
  • Microsoft Visual C++ 2012
  • Visual F# 2012 04940-004-0038003-02857
  • Microsoft Visual F# 2012
  • Windows Phone SDK 8.0 - DEU 04940-004-0038003-02857
  • Windows Phone SDK 8.0 - 德国
  • ASP.NET 和 Web 工具 2012.3.41009
  • GenerateUnitTest 1.0
  • Git 源代码控制提供程序 1.0.0.0
  • JetBrains ReSharper Ultimate 10.0.2 Build 104.0.20151218.120627
  • 适用于 Windows Phone 6.2.923.0 的 Microsoft Advertising SDK
  • Microsoft Advertising SDK for Windows Phone Build 6.2.923.0
  • 微软 XNA 游戏工作室 4.0
  • 微软 XNA 游戏工作室 4.0
  • NuGet-Paket-Manager 2.8.60318.667
  • PreEmptive Analytics Visualizer 1.0
  • SQL Server 数据工具 11.1.20627.00
  • Microsoft SQL Server 数据工具
  • Git 扩展

【问题讨论】:

  • 文件是否设置为“始终复制”?
  • 该死!所有其他配置文件都是,但不是那个!

标签: c# unit-testing visual-studio-2012 nunit resharper


【解决方案1】:

您没有列出安装的任何 NUnit 版本,但您标记了这个“nunit”,所以我假设您正在使用它!此外,我假设 NUnit >= 3.0 ... 如果不是,请忽略此。 :-)

NUnit 3.0 停止更改当前目录。无论如何,这样做对我们来说是个坏主意,对于 3.0 来说这是一个真的个坏主意,因为不同目录中的多个程序集可能同时运行。

所以,假设它仍然是 NUnit 问题,而不是使用相对路径,而是使用 TestContext.CurrentContext.TestDirectory 作为文件的位置。

【讨论】:

  • 您永远不知道哪个版本信息很重要...您假设正确:) 但是我到底要如何将我的custom.xml 复制到另一个目录中呢?我在我的生产代码深处使用File.ReadAllText("custom.xml")。我不想添加对 NUnit 的引用来测试是否应该使用TestContext.TestDirectory。并且创建一个采用工作目录的重载是没有选择的。我假设custom.xml 位于我的程序集旁边。我的安装程序确保了这一点。如何在我的测试中重现该场景?
  • 在您的生产代码中有两种方法: (1) 继续假设程序始终在当前目录设置为与您的程序集相同的位置运行。这是一个相当大的假设,但在您的情况下可能是有效的。但是,请考虑如果 cd 设置在其他位置并且使用完整路径运行程序会发生什么情况。 (2) 实际检查组件并找出它的位置。如果程序集从不进行卷影复制,则 Assembly.Location 适用于此。 Assembly.Codebase 效果更好,但需要您从生成的 URI 中获取 LocalPath。
  • 我应该补充一点...无论您在生产代码中做什么,您的测试代码仍然可以使用 TestContext.TestDirectory。
  • 对于 NUnit 3.6.1,您似乎可以使用 TestContext.CurrentContext.TestDirectory 来获取运行测试的位置。这对我有用。
【解决方案2】:

试试这个:

Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

【讨论】:

  • 在 DLL 中工作,但不在 WebApi 中。
【解决方案3】:

在我更改为此设置时已修复

【讨论】:

  • 谢谢,这就是我要找的东西
【解决方案4】:

帮助我解决此类问题的东西 - 我刚刚在 ReSharper 设置中关闭了 NUnit 2.x 支持(ReSharper -> 选项... -> 工具 -> 单元测试 -> NUnit)。

【讨论】:

  • 这有什么帮助?这是做什么的?
  • 为我工作。谢谢!
【解决方案5】:

我还关闭了 NUnit 2.x 支持,即使它显然与问题无关,它也解决了它(我有 ReSharper 2017.3.20180201.111630)

【讨论】:

    【解决方案6】:

    我们在测试中使用了 TestCaseSource。 所以在 Rider 版本 2021.1.3 中对我的修复是将 Build-->Unit Testing-->NUnit 更改为 Test Runner

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      相关资源
      最近更新 更多