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


221

我有一些使用内置测试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)。我已经尝试过点网框架3.5、4和4.5,其他给出了重新定位错误。

我试图建立解决方案和项目。测试浏览器显示消息“构建解决方案以发现所有可用测试。单击“全部运行”以构建,发现并运行解决方案中的所有测试。

因此问题是:如何让Visual Studio查找测试?


还尝试遵循以下方法:http : //msdn.microsoft.com/zh-CN/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中下载一个。
Brett Allred

我正在使用Visual Studio 2012 Ultimate。
ctrl-alt-delor 2012年

请共享您添加作为参考的框架版本和UnitTesting库版本
Adil 2012年

5
就我而言,删除app.config文件修复了单元测试浏览器
Chris Richner 2013年

4
尝试在输出窗口的“测试”类别下查找错误。我从发布版本创建功能测试,当我尝试使用调试版本进行调试(其dll位于不同的文件夹结构中)时,我没有任何构建错误,但必须从下拉菜单中进行测试。解决这些问题后,测试就会开始出现在“测试资源管理器”中
gDexter42,2014年

Answers:


227

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

我必须在Peter Lamberg的解决方案中再增加一个步骤-清理您的解决方案/项目。

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

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

我必须去测试菜单->测试设置-默认处理器体系结构-> x64。

他们仍然没有露面。

做一个构建。

仍然没有出现。

终于做了一次清洁

然后他们出现了。

我发现“清洁溶液”和“清洁”在设置更改时获得溶液打球的功能非常有用。有时我不得不走极端,删除objbin目录并进行重建。


虽然清洁有时会有所帮助,但这不是问题。我对网络驱动器上的项目有问题。而且构建有帮助的事实只是错误的构建工具的症状。
ctrl-alt-delor

7
哇!“干净的解决方案”似乎确实有效(而不是全部重建)。我认为这不再是Visual Studio 6.0中的有用技巧!
戴夫

“清洁”不适用于遇到此问题的我的同事。从她的TFS工作区中删除所有源代码并获取最新版本(带覆盖)后,它为她工作。然后效果很好!
Michael R

2
这是给我的。在混合使用x86,任何CPU,x64的解决方案中,未找到一个特定项目的测试。我清理了解决方案,更改了测试设置的默认体系结构,然后重新构建,然后可以看到所有内容。确实没有任何意义,因为更改架构会发现在不同CPU架构下编译的测试。
本H

2
就在我更改默认处理器时-显示了所有测试。非常感谢!
丹·但

160

请在类别定义中添加关键字public。您的测试类当前在其自己的程序集中不可见。

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

24
这么做是为了我,几乎糗我没有找到我自己:)
兰迪

5
我也有这个问题,我的问题是由于[TestMethod]其他代码的复制粘贴而被静态导致的。
Seph 2013年

2
@Seph:我[TestMethod]的是静态的,因为这就是UserTest1.cs新测试项目中的内容!也解决了我的问题。
Andre Luus 2013年

4
也不要放在static您的方法前面。我不知道为什么我会经常这样做。
列维尼娅

1
这为我做到了,很有趣,如何在如此显而易见的事情上浪费太多时间。谢谢您的回答乔·金
Thulani Chivandikwa

58

这有时可行。

检查“测试”菜单下的处理器体系结构是否与用于构建解决方案的处理器体系结构匹配。

测试->测试设置->默认处理器体系结构-> x86 / x64

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

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

编辑:正如Ourjamie在下面指出的那样,进行干净的构建可能也有帮助。除此之外,这是我遇到的另一件事:

对于在解决方案下创建的新测试项目,未在Configuration Manager中选中“生成”复选框。

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


是的,这些可能是它无法正常工作的其他原因,但是请参阅下面的打勾答案,了解为什么它对我不起作用。(默认情况下,共享文件夹处于禁用状态),如果您可以告诉我们如何更改此设置,我会给您一些要点。
ctrl-alt-delor

没有像x64这样的处理器,但我认为Microsoft将这个术语用于x86-64 / amd64 / x86e。也没有x86,只有x86系列。x代表未知数,因此x64家族的成员将是164、264、364……或者x86是86位处理器。
ctrl-alt-delor 2013年

感谢您的回答,它对我有帮助(我从x86版本切换到x64版本)
enguerran 2013年

即使在VS 2015中,也可以打开“测试资源管理器”窗口。很高兴我也可以从命令行运行测试。
布赖恩

32

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

所以我安装了以下内容: NUnit测试适配器

那为我解决了这个问题!


1
也可以通过NuGetInstall-Package NUnitTestAdapter
Darren Hale

谢谢@DarrenHale。在NuGet中搜索此软件包时,我还找到了一个名为NUnit TestAdapter的捆绑包,其中包括NUnit 2.6.4 Framework
射线

18

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

public async void ListCaseReplace() { ... }

没有出现但编译正常。当我删除async关键字后,测试将显示在“测试资源管理器”中。这是因为这是“一劳永逸async void”的方法。制定方法async Task,您将得到测试的回报!

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


2
我花了好一会儿才弄清楚这一点。我重构了一些异步方法,只是将关键字添加到测试中。只有当我用这个代码编写一个新的单元测试时,我才注意到其他测试也丢失了。我找到了这个答案,解释了为什么会这样。
julealgon 2014年

12

由于该项目位于共享驱动器上,如原始海报所示。VS.NET需要在加载和运行测试程序集之前信任网络位置。阅读此博客文章

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

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

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

 caspol -lg

提问者尚未证实此答案,因为我对答案不再感兴趣。如果它对您有效(或无效),请在下面添加评论。
ctrl-alt-delor

6
@richard因此,您接受未验证的答案,而否决了其他描述问题不同原因的解决方案的答案吗?....那真是怪了!
2013年

1
原来这对我来说是问题,但不是解决方案。我把所有东西都移到了本地,所有的测试都找到了!谢谢!
Travis Swientek 2013年

1
CasPol.exe可以在下面找到%windir%\Microsoft.NET\Framework[64]\[version]。验证您是否为正确的体系结构设置了策略。来源:msdn.microsoft.com/en-us/library/cb6t8dtz%28v=vs.100%29.aspx
EpicVoyage 2014年

这也是我的问题。如此烦人,VS没有找到它们,但给出了零的原因指示!
kaybee99

10

我发现的问题是,如果解决方案在网络驱动器/网络位置/共享驱动器上运行,则无法在“测试资源管理器”中找到测试(未显示任何内容)

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

COMPLUS_LoadFromRemoteSources并将其值设置为1


6

我遇到了同样的问题。就我而言,这是由私有财产 引起的TestContext

将其更改为以下内容有助于:

public TestContext TestContext
{
    get;
    set;
}

清洗并构建解决方案后(如@Ourjamie的答案所述),受影响的测试类中的测试方法可在“测试资源管理器”中找到。


可以保持相同的症状,因此,如果您清楚(从什么内容)进行了更改,则可以删除不赞成投票的内容。
ctrl-alt-delor 2014年

1
我完全一样,我遵循了完整的主题,然后进入了这个主题,并带我想到将其设置为公开宾果游戏:我的新测试出现了。我理解以前的评论,但是...由于这是Google带来的信息...这是当测试未显示时要阅读的主题。
edelwater 2014年

1
这是我问题的原因。我有一个依赖项接口字段作为私有字段。您是救生员!
亚历克斯(Alex)

6

尝试在网络共享上打开解决方案时遇到了相同的问题。在这种情况下,Test Explorer将不会检测到任何单元测试。解决方案结果是:

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

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


6

快速检查清单,用于解决一些常见的测试问题。确保:

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

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


这将解决此问题的大多数访问者的问题,并总结了大多数答案,但是并没有涵盖问题中的问题。
ctrl-alt-delor 2014年

1
谢谢。UTA001: TestClass attribute defined on non-public class
JarekPrzygódzki2014年

6

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

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

还有另一个Stack Overflow帖子讨论了此错误,并且相同的解决方案适用于他们。问题仍然是为什么这行得通。


3
也为我工作!我认为这是一个单独的问题。
贾斯汀·摩根

2
嘿,这个工作的人。非常感谢您。是否有任何解决方法可以使其在不以管理员身份运行的情况下运行?
Sriram Sakthivel

2
抱歉,我认为以管理员身份运行不是一个好的解决方案。除非有证据表明这是唯一方法。
ctrl-alt-delor 2014年

以管理员身份运行通常不是大问题。但是问题之一是您无法将Workitem发送到Outlook。
爱德华·奥拉米桑

编辑了您的答案以链接到相关的SO帖子,希望您不要介意。我同意斯里拉姆和理查德的观点。尽管这可行,但这是一种解决方法,而不是解决方案。为什么它甚至根本不起作用似乎还不清楚。
Steven Jeuris 2014年

4

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

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

我在“测试资源管理器”窗口中获得了测试。


我认为这不是同一个问题。
ctrl-alt-delor

3
我认为这相同的问题,只是由其他原因引起的。
斯蒂芬·鲍尔

2

从顶部的菜单栏中...

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

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

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

希望这可以帮助。


我尝试过,都可以使用nunit。但是这次,我试图运行使用编写的其他人的测试Microsoft.VisualStudio.TestTools.UnitTesting,知道我在做什么错吗?
ctrl-alt-delor 2012年

没什么关系...有时碰巧没有发现单元测试...因此,如果您打开测试资源管理器并构建解决方案,它将在一段时间内启动单元测试...也许您已经知道了。 ..
Adil 2012年

2
我只是想确保您使用的是快速版本或不包含测试工具的版本。您是否尝试过安装第三方测试跑步机?
Brett Allred 2012年

2

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


就我而言,app.config也杀死了单元测试的外观。删除app.config并重建测试项目后,他们终于回来了!
克里斯·里奇纳

2

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


2

这更多是为了帮助最终到达此处的人,而不是回答OP的问题:

尝试关闭并重新打开Visual Studio,这对我有用。

希望这对某人有帮助。


2

我知道这是一个较旧的问题,但是在Visual Studio 2015中,我遇到了无法识别新创建的测试类的问题。尝试了一切。最终成为问题的是该类未“包含在项目中”。我仅在重新启动Visual Studio并注意到我的测试类不存在时才发现此问题。在显示隐藏文件时,我发现它以及我编写的其他类均未包括在内。希望能有所帮助


2

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

我也在使用NUnit和Specflow。默认情况下,我的测试项目以X86为目标,但是我必须将其更改为X64。步骤是1.测试菜单->测试设置-默认处理器体系结构-> x64。2.清理Build 3. Build 4.如果仍未显示测试。5.转到工具扩展和更新,然后安装NUnit和Specflow库6.清理内部版本7.内部版本

然后通常测试会显示在“测试编辑器”中。


@srebella好,您解决了这个问题。我花了几天时间解决这个问题。请与社区分享您的经验。如果您认为有效,请将此答案放在首位。谢谢:-)
Shiran Jayawardena

1

我已经将VS 2012更新为“最新更新”。即Visual Studio的更新3。这为我解决了这个问题。


1

对我来说,解决方案要简单一些。

我刚刚将现有解决方案引入了我的计算机(从gitHub克隆),但我们没有跟踪Visual Studio创建的自动生成的.cs文件。(对于每个功能文件,都有一个同名的.cs文件)

实际上,在没有相关的.cs文件的情况下打开解决方案实际上使我可以导航到绑定的方法,因此,似乎specflow已正确连接,但是我无法在“测试资源管理器”中查看测试名称。

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

之后,我能够在测试浏览器中查看测试。


1

将解决方案从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。查看测试项目引用时,我意识到它的目标是错误的Microsoft Visual。此版本的Visual Studio的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

我重新构建了所有文件,并解决了这个问题-在“测试资源管理器”中找到了所有测试,现在所有测试都已找到并且可以正常运行。


1

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


或只是sn -Vr *,<public key token>以管理员身份在VS开发人员命令提示符下跳过本地计算机上的签名检查
Silas

1

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

我通过打开纠正了问题

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


1

这些都是很好的答案,但是我知道还有另一个原因。我碰到了。在我的一项测试中,我收到一条ReSharper消息,指示我有未使用的私有类。我将在即将进行的测试中使用该课程。这实际上使我所有的测试都消失了。


1

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

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


1

看起来NUnit Framework 2.6.4不能与NUnit测试适配器一起很好地工作。它在网站上提到测试适配器仅适用于NUnit Framework 2.6.3。

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

固定:

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

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

    b。列出已安装的软件包

    C。点击管理

    d。取消检查您的项目

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

  3. 清洁/重建解决方案

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

我看到了所有测试用例

希望这可以帮助


1

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


1

我遇到了同样的问题,但又有所不同。

我使用的是Visual Studio2012。出于某种原因,只有最初生成的文件的测试正在运行。但是另一个文件中的测试未运行。尝试了此处发布的其他解决方案,但没有用。

最终,我发现测试类中有一个私有方法,这是该类内部的第一个方法。我刚搬来的私有方法的测试方法; 所以现在,具有[TestMethod]属性的方法是第一个方法是类内部的方法。奇怪,但是现在可以了。

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


1

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

    [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(); }
罗伯特·格林

3
“测试不喜欢异步方法”false“测试不喜欢异步void方法”正确的,解决方案只是将测试方法声明为异步Task
Massimiliano Kraus's

1

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

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

通过工具>扩展和更新来安装NUnit3测试适配器已为我修复了此问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.