为啥 Visual Studio 2012 找不到我的测试?

Posted

技术标签:

【中文标题】为啥 Visual Studio 2012 找不到我的测试?【英文标题】: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 位于不同的文件夹结构中)进行调试时,我没有收到任何构建错误,但必须从下拉菜单中查看测试。一旦我解决了这些问题,测试就会开始出现在测试资源管理器中 【参考方案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】:

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

    测试类和测试方法是public 测试类有[TestClass]属性 测试方法有[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 突然我没有看到我的测试用例列出来。

修复:

    卸载 Nuget 和 Nuget 测试适配器

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

    b.列出已安装的包

    c。点击管理

    d。取消选中您的项目

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

    清理/重建解决方案

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

我看到了所有的测试用例

希望对你有帮助

【讨论】:

【参考方案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 测试适配器 > 扩展和更新为我解决了这个问题。

【讨论】:

以上是关于为啥 Visual Studio 2012 找不到我的测试?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Visual Studio 2019 (XAMARIN) 中找不到 Android 库

为啥 Visual Studio 显示错误,提示在类型 Window 中找不到 Windows.Resources?

为啥我的 Visual Studio 开始以这种方式运行? iisexpress 找不到或打开 PDB 文件

找不到可安装的 ISAM Visual Studio 2012

VS2012安装失败,提示visual studio 2012 prerequisites找不到申请的对象

C++ Visual Studio 2012 错误 C3861:'_T':找不到标识符?