【问题标题】:Why does visual studio 2012 not find my tests?为什么 Visual Studio 2012 找不到我的测试?
【发布时间】:2012-11-12 01:33:49
【问题描述】:

我有一些使用内置 Microsoft.VisualStudio.TestTools.UnitTesting 的测试,但无法让它们运行。

我正在使用 Visual Studio 2012 Ultimate。

我有两个项目的解决方案;一个有测试,using Microsoft.VisualStudio.TestTools.UnitTesting[TestClass] 在类之前,[TestMethod] 在测试方法之前和参考Microsoft.VisualStudio.QualityTools.UnitTestFramework(版本 10.0.0.0,运行时版本 v2.0.50727)。我已经尝试过 dot-net framework 3.5、4 和 4.5,其他版本给出了重新定位错误。

我已尝试构建解决方案和项目。测试资源管理器有消息“构建您的解决方案以发现所有可用的测试。单击“全部运行”以构建、发现和运行解决方案中的所有测试。

所以问题是:如何让 Visual Studio 找到测试?


也尝试遵循此操作:http://msdn.microsoft.com/en-US/library/ms379625%28v=VS.80%29.aspx 但没有成功:当要求右键单击并选择 create tests 时,我卡在入门部分。没有create tests


我有这个测试(它可以编译,但没有显示在测试资源管理器中):

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace tests {
    [TestClass]
    public class SimpleTest {
        [TestMethod]
        public void Test() {
            Assert.AreEqual("a","a", "same");
        }
    }
}

我现在发现(请参阅下面已删除的答案)这是因为它位于共享驱动器上,但我还不知道如何解决它。 (可能与安全设置有关)。

【问题讨论】:

  • VS 2012 哪个版本?您可以下载像 TestDriven.Net 这样的测试运行器,或者 Resharper 中有一个。
  • 我正在使用 Visual Studio 2012 Ultimate。
  • 请分享您添加的框架版本和单元测试库版本作为参考
  • 在我的情况下,删除 app.config 文件修复了单元测试资源管理器
  • 尝试在输出窗口的“测试”类别下查找错误。我从发布版本创建功能测试,当我尝试使用调试版本(其 dll 位于不同的文件夹结构中)进行调试时,我没有收到任何构建错误,但必须从下拉菜单中查看测试。一旦我解决了这些问题,测试就会开始出现在测试资源管理器中

标签: c# .net visual-studio unit-testing


【解决方案1】:

我有相同的症状,但在不同的情况下。

我不得不在 Peter Lamberg 的解决方案中添加一个额外的步骤 - 清理您的解决方案/项目。

我的单元测试项目以 x64 为目标。当我创建项目时,它最初是针对 x86 的。

切换到 x64 后,我的所有单元测试都消失了。

我必须进入测试菜单 -> 测试设置 - 默认处理器架构 -> x64。

他们仍然没有出现。

做了一个构建。

还是没有出现。

终于搞定了

然后他们出现了。

我发现 Clean Solution 和 Clean 在设置更改时获得解决方案以打球非常有用。有时我不得不走极端,删除objbin目录并重新构建。

【讨论】:

  • 虽然清洁有时会有所帮助,但这不是问题所在。我对网络驱动器上的项目有疑问。构建有帮助的事实只是构建工具有缺陷的症状。
  • 哇! “清洁解决方案”似乎确实有效(而不是全部重建)。我认为这在 Visual Studio 6.0 中不再是一个有用的技巧了!
  • “清洁”不适用于遇到此问题的同事。从她的 TFS 工作区中删除所有源代码并获取最新(w/覆盖)后,它对她有用。然后效果很好!
  • 这是给我的。在混合了 x86、Any CPU、x64 的解决方案中,没有找到一个特定项目的测试。我清理了解决方案,更改了测试设置的默认架构,然后重新构建,然后一切都可以看到了。这真的没有意义,因为更改架构会发现在不同 CPU 架构下编译的测试。
  • 当我更改默认处理器时——我的所有测试都显示了。非常感谢!
【解决方案2】:

请将关键字 public 添加到您的类定义中。您的测试类目前在其自己的程序集之外不可见。

namespace tests {
    [TestClass]
    public class SimpleTest {
        [TestMethod]
        public void Test() {
            Assert.AreEqual("a","a", "same");
        }
    }
}

【讨论】:

  • 为我做的,差点尴尬我自己没有发现:)
  • 我也遇到了这个问题,我的问题是[TestMethod] 是静态的,因为复制粘贴了其他代码。
  • @Seph:我的[TestMethod]s 是静态的,因为那是新测试项目中的UserTest1.cs 所具有的!也解决了我的问题。
  • 也不要在你的方法前面加上static。我不知道为什么我经常出于习惯这样做。
  • 这是为我做的,有趣的是,你怎么会在本应如此明显的事情上浪费这么多时间。感谢乔金的回答
【解决方案3】:

这有时会奏效。

检查测试菜单下的处理器架构是否匹配 用于构建解决方案的那个。

测试 -> 测试设置 -> 默认处理器架构 -> x86 / x64

如其他帖子中所述,请确保您已打开“测试资源管理器”窗口。 测试 -> Windows -> 测试资源管理器

然后用测试重建项目应该会使测试出现在测试资源管理器中。

编辑:正如 Ourjamie 在下面指出的,进行干净的构建也可能会有所帮助。 除此之外,我还遇到了一件事情:

配置管理器中的“构建”复选框未选中 对于我在解决方案下创建的新测试项目。

转到构建 -> 配置管理器。 确保您的测试项目已选中构建复选框 适用于所有解决方案配置和解决方案平台。

【讨论】:

  • 是的,这些可能是它不起作用的其他原因,但请参阅下面勾选的答案,了解为什么它对我不起作用。 (默认禁用共享文件夹),如果您能告诉我们如何更改此设置,我会给您一些积分。
  • 没有像 x64 这样的处理器,但我认为微软将这个术语用于 x86-64/amd64/x86e。也没有 x86,只有 x86 系列。 x 代表未知数,因此 x64 系列的成员将是 164、264、364 ……或者 x86 是 86 位处理器。
  • 感谢您的回答,它对我有帮助(我从 x86 版本切换到 x64 版本)
  • 即使在 VS 2015 中打开测试资源管理器窗口也可以正常工作。很高兴我也可以从命令行运行测试。
【解决方案4】:

我有 Visual Studio 2012,但在测试资源管理器中看不到测试,

所以我安装了以下内容: NUnit Test Adapter

这解决了我的问题!

【讨论】:

  • 也可通过 NuGet Install-Package NUnitTestAdapter
  • 谢谢@DarrenHale。在 NuGet 中搜索这个包时,我还发现了一个名为 NUnit TestAdapter 的包,包括 NUnit 2.6.4 Framework
【解决方案5】:

根据我最近的经验,以上所有方法均无效。我的测试方法

public async void ListCaseReplace() { ... }

没有出现,但编译正常。当我删除 async 关键字时,测试出现在测试资源管理器中。这是因为async void 是一种“即发即弃”的方法。创建async Task 方法,你会得到你的测试!

此外,没有将测试项目的配置设置为“构建”也会阻止测试显示。配置管理器 > 检查您的测试以构建。

【讨论】:

  • 我花了很长时间才弄清楚这一点。我将一些方法重构为异步,并将关键字添加到测试中。只有当我用它编写一个新的单元测试时,我才注意到其他测试也丢失了。我找到了this answer,这解释了为什么会发生这种情况。
【解决方案6】:

由于该项目位于原始海报所示的共享驱动器上。 VS.NET 在加载和运行测试程序集之前需要信任网络位置。 Have a read of this blog post.

要允许 VS.NET 加载网络共享的内容,需要将它们(共享)添加到受信任的位置。要将位置添加到完整信任列表运行(显然根据您的环境需要进行修改):

 caspol -m -ag 1.2 -url file:///H:/* FullTrust

要验证或列出现有的受信任位置,请运行:

 caspol -lg

【讨论】:

  • 这个答案未经提问者验证,因为我不再对答案感兴趣。如果它适合您(或不适合),请在下方添加评论。
  • @richard 因此,您接受了一个您没有验证的答案,并否决了描述针对您的问题的不同原因的解决方案的其他答案? ....这很奇怪!
  • 这对我来说是个问题,但不是解决方案。我把所有东西都搬到了本地,所有的测试都找到了!谢谢!
  • CasPol.exe 可以在%windir%\Microsoft.NET\Framework[64]\[version] 下找到。确认您正在为正确的体系结构设置策略。来源:msdn.microsoft.com/en-us/library/cb6t8dtz%28v=vs.100%29.aspx
  • 这也是我的问题。太烦人了,VS 没有接他们,但对原因给出了零指示!
【解决方案7】:

我发现的一个问题是,如果解决方案在网络驱动器/网络位置/共享驱动器上运行,则在测试资源管理器中找不到测试(没有显示)

您可以通过添加环境变量来解决此问题。

COMPLUS_LoadFromRemoteSources 并将其值设置为 1

【讨论】:

    【解决方案8】:

    我遇到了同样的问题。在我的情况下,它是由 私有财产 TestContext 引起的。

    将其更改为以下帮助:

    public TestContext TestContext
    {
        get;
        set;
    }
    

    在清理和构建解决方案后(如@Ourjamie 的回答中所述),受影响的测试类中的测试方法在测试资源管理器中可用。

    【讨论】:

    • OK 相同的症状,所以如果你明确你改变了什么(从什么),就会删除反对票。
    • 我有完全一样的,我跟着完整的线程,然后来到这个并让我想到将它设置为 public ,宾果游戏:我的新测试出现了。我了解以前的 cmets,但是……因为这是从 Google 带给我们的……这是当测试未出现时要阅读的线程。
    • 这是我的问题的原因。我有一个依赖接口的字段作为私有字段。你是一个救生员!
    【解决方案9】:

    我在尝试在网络共享上打开解决方案时遇到了同样的问题。在这种情况下,测试资源管理器不会检测到任何单元测试。解决方案原来是:

    控制面板 -> Internet 选项 -> “安全”选项卡 -> 单击“Intranet”,将持有网络共享的服务器 IP 地址或主机名添加到“站点”列表中。

    完成此操作后,我重新编译了解决方案,现在出现了测试。 这应该与@BigT 的答案非常相似。

    【讨论】:

      【解决方案10】:

      解决一些常见测试问题的快速检查列表。确保:

      1. 测试类和测试方法是public
      2. 测试类有[TestClass]属性
      3. 测试方法有[TestMethod]属性

      如果这没有帮助,请尝试清理、重建解决方案并重新启动 Visual Studio。

      【讨论】:

      • 这将解决大部分访问此问题的人的问题,并总结大部分答案,但它不涵盖问题中的问题。
      • 谢谢。 UTA001: TestClass attribute defined on non-public class
      【解决方案11】:

      我收到了错误:"Failed to initialize client proxy: could not connect to vstest.discoveryengine.exe."

      尝试以管理员身份运行 Visual Studio。这对我有用。

      There is another Stack Overflow post discussing this error,同样的解决方案也适用于他们。问题仍然是为什么这有效。

      【讨论】:

      • 也为我工作!我认为这是一个单独的问题。
      • 嘿,这个工作的人。非常感谢您.. 有什么解决方法可以在不以管理员身份运行的情况下使其工作?
      • 对不起,我不认为以管理员身份运行是一个好的解决方案。除非有证据表明这是唯一的方法。
      • 以管理员身份运行通常不是什么大问题。但问题之一是您无法将 Workitem 发送到 Outlook。
      • 编辑了您的答案以链接到相关的 SO 帖子,希望您不介意。不过,我同意斯里拉姆和理查德的观点。尽管这可行,但它是一种解决方法,而不是解决方案。为什么它甚至完全有效似乎还不清楚。
      【解决方案12】:

      我有时会出现同样的症状。

      我所做的是:
      1. 关闭测试资源管理器窗口
      2. 清洗溶液
      3. 重建解决方案
      4. 从测试 -> Windows -> 测试资源管理器重新启动测试资源管理器窗口。

      我在测试资源管理器窗口中进行了测试。

      【讨论】:

      • 我不认为这是同一个问题。
      • 我认为它同样的问题,只是由其他原因引起
      【解决方案13】:

      从顶部的菜单栏...

      测试 -> 运行 -> 所有测试

      您还可以从测试资源管理器查看所有测试(测试 -> Windows -> 测试资源管理器)

      在 VS 2012 中,如果您错过任何内容,请尝试使用右上角的快速启动栏 (Ctrl + Q)“测试”进行搜索

      希望这会有所帮助。

      【讨论】:

      • 我试过了,都和 nunit 一起工作。但是这次我尝试运行使用Microsoft.VisualStudio.TestTools.UnitTesting 编写的其他人的测试,知道我还做错了什么吗?
      • 没有任何区别...有时碰巧没有发现单元测试...所以如果您打开测试资源管理器并构建解决方案,它会在一段时间内启动单元测试.. . 可能你已经知道...
      • 我只是想确保您使用的是快速版本或不包含测试工具的版本。您是否尝试过安装第三方测试运行器?
      【解决方案14】:

      我发现解决此问题的最佳方法是创建一个 .proj msbuild 文件并将您遇到问题的单元测试项目添加到此文件中,然后使用 mstest 的命令行版本执行测试。我在我的 app.config 中发现了一个小配置问题,该问题仅在从 mstest 运行测试时出现 - 否则测试项目构建得很好。此外,您还会发现此方法的任何间接参考问题。一旦你可以使用 mstest 从命令行运行单元测试,你就可以做一个干净的解决方案,重建解决方案,你的测试应该会被正确地发现。

      【讨论】:

      • 就我而言,app.config 也扼杀了单元测试的外观。删除 app.config 并重建测试项目后,他们终于回来了!
      【解决方案15】:

      在我的情况下,它是另一回事。我已经安装了一个软件包,然后将其卸载并重新安装了早期版本。这在我的 app.config 中留下了一个残留的 configuration/runtime/asssemblyBinding/dependencyIdentity 重定向。我不得不纠正它。 我通过查看Output 窗口并在下拉菜单中选择“Tests”来解决这个问题。错误消息在那里。 这很痛苦......我希望它可以帮助其他人。

      【讨论】:

        【解决方案16】:

        这更多的是帮助那些最终来到这里的人,而不是回答 OP 的问题:

        尝试关闭并重新打开视觉工作室,这对我有用。

        希望这对某人有所帮助。

        【讨论】:

          【解决方案17】:

          我知道这是一个较老的问题,但在 Visual Studio 2015 中,我遇到了无法识别我新创建的测试类的问题。什么都试过了。最终的问题是该课程没有“包含在项目中”。我只是在重新启动 Visual Studio 并注意到我的测试类不存在时才发现这一点。在显示隐藏文件时,我看到它以及我编写的其他类都没有包括在内。希望有帮助

          【讨论】:

            【解决方案18】:

            当我尝试在另一台 PC 上构建解决方案时,我多次遇到此问题。

            我也在使用 NUnit 和 Specflow。默认情况下,我的测试项目以 X86 为目标,但我必须将其更改为 X64。 步骤是 1. 测试菜单 -> 测试设置 - 默认处理器架构 -> x64。 2.清洁构建 3. 构建 4. 如果仍然没有出现测试。 5. 转到工具  扩展和更新,然后安装 NUnit 和 Specflow 库 6.清洁构建 7.构建

            然后通常测试会出现在测试编辑器中。

            【讨论】:

            • @srebella 很高兴您解决了这个问题。我花了几天时间来解决这个问题。请与社区分享您的经验。如果您认为它有效,请将此答案放在首位。谢谢:-)
            【解决方案19】:

            我已将 VS 2012 更新为最新更新。即视觉工作室更新3。 这解决了我的问题。

            【讨论】:

              【解决方案20】:

              对我来说,解决方案稍微简单一点。

              我刚刚在我的机器上引入了一个现有的解决方案(从 gi​​tHub 克隆),我们不跟踪 Visual Studio 创建的自动生成的 .cs 文件。 (每个功能文件都有一个同名的.cs文件)

              在没有关联的 .cs 文件的情况下打开解决方案实际上允许我导航到绑定的方法,因此看起来好像 specflow 已正确连接,但我无法在测试资源管理器中查看测试名称。

              对于这个问题,只需从项目中排除功能文件,然后重新包含它们,强制 VS 重新生成这些自动生成的代码隐藏文件。

              之后,我可以在测试资源管理器中查看测试。

              【讨论】:

                【解决方案21】:

                我在将解决方案从 Microsoft Visual Studio 2012 Express for Web 升级到 Microsoft Visual Studio 2013 时遇到了这个问题。

                我在 2012 年创建了一个单元测试项目,在 2013 年打开后,单元测试项目不会在测试资源管理器中显示任何测试。每次我尝试运行或调试测试时它都会失败,并在输出窗口中说以下内容:

                    Failed to initialize client proxy: 
                    could not connect to vstest.discoveryengine.x86.exe
                

                我还注意到,在调试测试时,它正在启动 Visual Studio 2012 的一个实例。这使我了解到单元测试项目仍然引用 2012 的事实。查看测试项目参考,我意识到它的目标是此版本 Visual Studio 的错误 Microsoft Visual Studio 单元测试框架 DLL:

                C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
                

                我把版本号从11.0改成了12.0:

                C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
                

                我重建了所有,这解决了问题 - 所有测试都在测试资源管理器中找到,现在所有测试都找到并完美运行。

                【讨论】:

                  【解决方案22】:

                  检查您的测试项目是否在您的项目属性 -> 签名中设置为 仅延迟签名。如果是,请取消选择它并进行干净的重建。

                  【讨论】:

                  • 或者只是通过sn -Vr *,<public key token>作为VS开发人员命令提示符中的管理员跳过本地计算机上的签名检查
                  【解决方案23】:

                  我在 VS2013 Ultimate 中尝试在网络共享上打开解决方案时遇到了同样的问题。

                  我通过打开解决了这个问题

                  控制面板 -> Internet 选项 -> “安全”选项卡 -> 单击“本地 Intranet”,单击站点并确保选中“自动检测 Intranet 网络”。

                  【讨论】:

                    【解决方案24】:

                    这些都是很好的答案,但我知道还有一个原因;我刚碰到它。在我的一项测试中,我收到一条 ReSharper 消息,表明我有一个未使用的私人课程。这是我将在即将到来的测试中使用的课程。这实际上导致我的所有测试都消失了。

                    【讨论】:

                      【解决方案25】:

                      检查引用的程序集是否有可能将“复制本地”设置为“假”的程序集。

                      如果您的测试项目构建到它自己的文件夹(例如 bin/Debug)并且该项目依赖于另一个程序集,并且“引用”列表中的这些程序集之一被标记为 Copy Local = "False",则程序集无法加载,因为缺少依赖项,并且您的测试在构建后将不会加载。

                      【讨论】:

                        【解决方案26】:

                        看起来 NUnit Framework 2.6.4 不能很好地与 NUnit 测试适配器配合使用。在网站中,它提到测试适配器仅适用于 NUnit Framework 2.6.3。

                        这是我的问题: 1.我在VS2012中通过Nuget分别下载了NUnit和NUnit Test Adapter。不知何故,NUnit 更新到 2.6.4 突然我没有看到我的测试用例列出来。

                        修复:

                        1. 卸载 Nuget 和 Nuget 测试适配器

                          一个。转到工具> Nuget > Nuget Pkg 管理器> 管理 Nuget Pkg 解决方案

                          b.列出已安装的包

                          c。点击管理

                          d。取消选中您的项目

                        2. 安装 NUnit 测试适配器,包括 NUnit 2.6.3 框架

                        3. 清理/重建解决方案

                        4. 打开测试 > 测试资源管理器 > 全部运行

                        我看到了所有的测试用例

                        希望对你有帮助

                        【讨论】:

                          【解决方案27】:

                          这里的解决方案都没有帮助我。一个解决方案不会发现测试,而引用相同项目的另一个解决方案工作正常。 我终于通过删除 solutionname.v12.suo 文件解决了这个问题。

                          【讨论】:

                            【解决方案28】:

                            我有同样的问题,但有点不同。

                            我使用的是 Visual Studio 2012。出于某种原因,只有初始生成文件的测试正在运行。但是另一个文件中的测试没有运行。尝试了此处发布的不同解决方案,但没有奏效。

                            最后我发现我在测试类中有一个私有方法,这是该类中的第一个方法。我只是将私有方法 移到了一个测试方法之后;所以现在,具有[TestMethod] 属性的方法是类中的 first 方法。奇怪,但现在它可以工作了。

                            希望有一天这对某人有所帮助。

                            【讨论】:

                              【解决方案29】:

                              测试不喜欢异步方法。例如:

                                  [TestMethod]
                                  public async void TestMethod1()
                                  {
                                      TestLib oLib = new TestLib();
                                      var bTest = await oLib.Authenticate();
                              
                                  }
                              

                              这样做之后:

                                  [TestMethod]
                                  public void TestAuth()
                                  {
                                      TestMethod1();
                                  }
                              
                                  public async void TestMethod1()
                                  {
                                      TestLib oLib = new TestLib();
                                      var bTest = await oLib.Authenticate();
                              
                                  }
                              

                              它看到了测试。

                              【讨论】:

                              • 更好的答案是[Test] public void XamarinExampleTest() { // This workaround is necessary on Xamarin, // which doesn't support async unit test methods. Task.Run(async () => { // Actual test code here. }).GetAwaiter().GetResult(); }
                              • “测试不喜欢 async 方法”false"Tests do not like async void methods"true,解决方法就是简单的声明一个测试方法为async Task.
                              【解决方案30】:

                              添加我的答案,因为这是 Google 上的最高结果。

                              我正在使用 Visual Studio 2015 并且(不知不觉 - 我刚刚运行 Install-Package NUnit)将 NUnit3 包 NuGet 安装到我的测试项目中。我已经安装了 NUnit 测试适配器扩展,但我的测试仍然没有显示出来。

                              通过工具安装 NUnit3 测试适配器 > 扩展和更新为我解决了这个问题。

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2014-03-09
                                • 1970-01-01
                                • 1970-01-01
                                • 2011-06-24
                                • 1970-01-01
                                • 2023-03-12
                                相关资源
                                最近更新 更多