为什么visual studio 2012找不到我的测试?

时间:2012-11-23 17:04:43

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

我有一些使用内置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");
        }
    }
}

我现在已经发现(见下面删除的答案),因为它位于共享驱动器上,但我还不知道如何绕过它。 (关于安全设置的事情可能)。

49 个答案:

答案 0 :(得分:227)

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

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

我的unittest项目以x64为目标。当我创建项目时,它最初的目标是x86。

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

我必须去测试菜单 - >测试设置 - 默认处理器架构 - > 64。

他们仍然没有出现。

做了一个构建。

仍然没有出现。

最后做了一个干净的

然后他们出现了。

我发现清洁解决方案和清洁在设置更改时获得解决方案非常有用。有时我必须走极端并删除objbin目录并进行重建。

答案 1 :(得分:159)

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

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

答案 2 :(得分:58)

这有时会奏效。

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

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

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

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

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

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

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

答案 3 :(得分:32)

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

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

为我解决了这个问题!

答案 4 :(得分:18)

在我最近的经历中,以上所有都不起作用。我的测试方法

public async void ListCaseReplace() { ... }

没有出现,但编译得很好。当我删除async关键字时,测试资源管理器中显示的测试结果。这是因为async void是一种“即发即忘”的方法。制作方法async Task,您将得到测试!

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

答案 5 :(得分:12)

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

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

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

验证或列出现有的受信任位置:

 caspol -lg

答案 6 :(得分:10)

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

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

COMPLUS_LoadFromRemoteSources并将其值设置为1

答案 7 :(得分:6)

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

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

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

答案 8 :(得分:6)

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

  1. 测试类和测试方法为public
  2. 测试类具有[TestClass]属性
  3. 测试方法具有[TestMethod]属性
  4. 如果这样做无效,请尝试清理,重建解决方案并重新启动Visual Studio。

答案 9 :(得分:6)

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

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

public TestContext TestContext
{
    get;
    set;
}

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

答案 10 :(得分:6)

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

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

There is another Stack Overflow post discussing this error,同样的解决方案适用于他们。问题仍然存在的原因。

答案 11 :(得分:4)

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

我做的是:
1.关闭Test Explorer窗口
2.清理解决方案
3.重建解决方案
4.从Test中重新启动Test Explorer窗口 - > Windows - >测试浏览器。

我在Test Explorer窗口中进行了测试。

答案 12 :(得分:2)

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

尝试关闭并重新打开visual studio,为我做了诀窍。

希望这有助于某人。

答案 13 :(得分:2)

我知道这是一个较旧的问题,但在Visual Studio 2015中,我遇到了新创建的测试类无法识别的问题。尝试了一切。最终成为问题的是该课程没有包括在项目中#34;。我只是在重新启动Visual Studio时发现了这一点,并注意到我的测试类不在那里。在显示隐藏文件时,我看到它以及我编写的其他类都没有包括在内。希望有所帮助

答案 14 :(得分:2)

当我尝试在不同的PC上构建解决方案时,我多次遇到此问题。

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

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

答案 15 :(得分:2)

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

答案 16 :(得分:2)

从顶部的菜单栏...

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

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

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

希望这有帮助。

答案 17 :(得分:2)

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

答案 18 :(得分:1)

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

答案 19 :(得分: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();

    }

它看到了测试。

答案 20 :(得分:1)

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

答案 21 :(得分:1)

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

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

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

答案 22 :(得分:1)

检查引用的程序集是否包含可能具有"复制本地"设置为" False"。

如果您的测试项目构建到它自己的文件夹(例如bin / Debug),并且项目依赖于另一个程序集,并且References列表中的其中一个程序集被标记为Copy Local =" False&# 34;,由于缺少依赖关系,程序集无法加载,并且在构建后不会加载测试。

答案 23 :(得分:1)

看起来NUnit Framework 2.6.4与NUnit Test Adapter不兼容。在网站上,它提到测试适配器只能与NUnit Framework 2.6.3一起使用。

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

修正:

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

    一个。转到工具> Nuget> Nuget Pkg经理>管理Nuget Pkg for Solution

    湾列出已安装的软件包

    ℃。点击管理

    d。取消检查您的项目

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

  3. 清洁/重建解决方案

  4. Open Test>测试资源管理器>全部运行

  5. 我看到了所有的测试用例

    希望这有帮助

答案 24 :(得分:1)

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

答案 25 :(得分:1)

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

我通过打开

来纠正了这个问题

控制面板 - >互联网选项 - > "安全"标签 - >单击"本地Intranet",单击站点并确保"自动检测Intranet网络"被勾选了。

答案 26 :(得分: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年。查看测试项目参考我发现它的目标是此版本的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

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

答案 27 :(得分:1)

对我来说,解决方案只是稍微复杂一点。

我刚刚将一个现有的解决方案带到我的机器上(从gitHub克隆),我们不跟踪Visual Studio创建的自动生成的.cs文件。 (对于每个要素文件,都有一个名称相同的.cs文件)

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

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

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

答案 28 :(得分:1)

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

答案 29 :(得分:1)

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

我使用的是visual studio 2012.由于某种原因,只有初始生成文件的测试正在运行。但是另一个文件中的测试没有运行。试过这里发布的不同解决方案,没有用。

最后我发现我在测试类中有一个私有方法,这是该类中的第一个方法。我刚刚在测试方法之后移动了私有方法;现在,具有[TestMethod]属性的方法是类中的第一个方法。奇怪,但现在它的工作原理。

希望有一天能帮到某人。

答案 30 :(得分:0)

谷歌搜索“视觉工作室无法看到测试”后,它把我带到了这里,所以我想我会分享我的问题。我可以构建我的解决方案,测试已经存在,但我无法看到他们!它转变为我们这是IDE的一个怪癖,导致了这个问题。请参阅下面的图片以获得解释和解决方法:

enter image description here

答案 31 :(得分:0)

Visual Studio 2015(第14版.....) - 同样的问题

原因:NUnit和NUnit测试适配器的不同版本 在我的情况下,我有NUnit(3.5)和NUnit测试适配器的最新版本,但测试适配器不是正确的。对于NUnit 3及更高版本,必须使用NUnit3TestAdapter

解决方案: 卸载了"故障" NUnint测试适配器并安装了UNit3TestAdapter v.3.5.0(最新版本为3.6.0,但没有使用它以使其与NUnit保持一致)

重建解决方案之后测试加快了:)

答案 32 :(得分:0)

您可以做的最简单的事情就是将这些文件从文件资源管理器拖放到Test项目中。再次建立项目,你很高兴!

OR

在文本编辑器中打开Test项目的.csproj文件,并手动包含要编译的文件名。在文件中搜索Compile标记,然后添加要运行的文件。

<ItemGroup>
    <Compile Include="TestSettings.cs" />
    <Compile Include="TestLibrary.cs" />
    <Compile Include="UnitTest1.cs" />
</ItemGroup>

为您的文件添加Compile标记并保存。现在运行测试。将检测并运行带有单元测试的文件。

答案 33 :(得分:0)

问题是测试运行器被配置为不从远程驱动器运行测试。当我将项目复制到本地驱动器时它工作正常,但我需要它在共享驱动器上(不记得为什么)。

我读到它可以配置为从共享驱动器工作,但从来没有这样做,因为当我发现我已经在Debian上切换到MonoDevelop的解决方案时。

答案 34 :(得分:0)

我阅读了所有现有的答案,发现我的(xUnit)测试没有被发现,因为我删除了“未使用的”引用,更具体地说是xunit.execution.desktop。重新安装xUnit包修复了我的问题。

答案 35 :(得分:0)

这个只是咬我。我在我的项目中添加了一个测试,但无法让它显示在Test Explorer中。我的旧测试都出现了。最后,我意识到我只是查看特定的播放列表,而我没有将新测试添加到播放列表中。如果您正在使用播放列表,请选择“所有测试”并查看VS是否找到您的测试并在测试资源管理器中显示它们。然后,您也可以将它们添加到所需的播放列表中。

答案 36 :(得分:0)

在我的情况下,我有3个测试项目,使用Visual Studio 2017创建(但我认为它并不重要),并且测试资源管理器中只发现了其中两个。我意识到第三个项目有Microsoft.VisualStudio.QualityTools.UnitTestFramework dll的不同版本。 我在NuGet Manager中更新了它,测试出现了。

答案 37 :(得分:0)

我们正在使用xunit和解决方案为我工作,团队正在删除文件夹%TEMP%\ VisualStudioTestExplorerExtensions

阅读此主题。

Why is the Visual Studio 2015/2017 Test Runner not discovering my xUnit v2 tests

答案 38 :(得分:0)

可能会阻止发现测试的另一个问题,通常是在测试输出窗口中显示消息,如:

Failed to configure settings for runsettings plugin 'VSTest Run Configuration' as it threw following exception:
'An error occurred while parsing EntityName. Line 1, position 8.'
Please contact the plugin author.

这可能是由于路径中的字符或文件名需要转义才能解析为xml。具体而言&amp; 字符,目录或文件名中不允许使用&lt; &gt; 。这会导致测试发现失败并且无法识别测试,但我仍然可以通过单击边距来使用Resharper手动运行测试。

答案 39 :(得分:0)

这个问题似乎有很多不同的解决方案可能会添加我自己的:

关闭Visual Studio

重命名C:\ Users \ username \ AppData \ Local \ Microsoft \ VisualStudio \ 12.0 \ ComponentModelCache 到ComponentModelCache.old

运行Visual Studio,将重建组件缓存。

答案 40 :(得分:0)

由于这些答案都没有解决我遇到的原因,对于这个问题,我也会在这里添加我的答案。

就我而言,这是一个复制粘贴代码问题。我们有一个TestProjectA,其中有一些特定类型的测试,我们希望将它们提取到自己的测试项目 - TestProjectB。现在的问题是,虽然TestProjectA中的测试继续显示正常,但新的TestProjectB中的测试未显示在VS Test Explorer中 - 除非您专门构建TestProjectB或者手动右键单击那里的测试并运行它。

原因是在复制粘贴代码时,某些命名空间没有得到更新:

  • TestMethodA()位于命名空间TestClassA TestProjectA.ModuleA \TestProjectA\TestClassA.cs,文件路径为TestMethodA()
  • 与名称空间为TestClassB的{​​{1}}中的TestProjectA.ModuleA以及文件路径\TestProjectB\TestClassB.cs

因此,Visual Studio在“输出”窗口中打印出一条消息,表明这两者的TestId是相同的,并且由于两者之间的TestId冲突而在测试资源管理器中继续显示TestProjectA而不是TestProjectB项目。将名称空间更正为TestProjectB.ModuleB \TestProjectB\TestClassB.cs修正了问题。

答案 41 :(得分:0)

我重复遇到的一个问题是没有在Windows 8+上以管理员身份运行Visual Studio(显式)。我尝试了列出的几个建议,但在我以管理员身份运行VS 2013之前,他们没有让单元测试出现(即使我的快捷方式设置为以这种方式打开VS,要么打开解决方案文件,要么有时单击它没有的快捷方式#39; t实际上以管理员身份打开。)

答案 42 :(得分:0)

我在Windows 7 SP1 x64上使用针对&#34;任何CPU&#34;的测试项目在Visual Studio 2013 Update 4中遇到了同样的问题。平台配置。

问题在于测试项目实际命名为&#34;测试&#34;并且在第二次重建项目时会消失。

将项目重命名为&#34; MyProject.Tests&#34;例如,测试不再消失。

答案 43 :(得分:0)

这是根据用户错误/愚蠢添加到列表中的另一个....我尝试了这个问题的各种答案,然后在Configuration Manager(构建菜单,Configuration Manager)中实现了我的测试项目未被检查)所以它没有被构建&gt;。&lt;

发布此信息,希望能像我刚才那样浪费一两个小时的人!

答案 44 :(得分:0)

我在VS2013 Ultimate中遇到了同样的问题。我的问题是我正在创建Windows服务而忘记卸载它。所以服务正在运行,VS无法访问其中一个导致整个测试套件根本没有加载的DLL。

答案 45 :(得分:0)

Visual Studio Professional 2012,此处更新4。在与测试类相同的项目中使用Interop函数定义(DllImport / extern)会使测试资源管理器混乱。将Interop移动到一个单独的项目中,解决了这个问题。

答案 46 :(得分:0)

我复制粘贴了方法声明,其中包含一个输入字符串参数。忘了删除输入参数。

  public void ExtractValueFromLineTest(string input) {}//test not discovered because of the string input param

答案 47 :(得分:0)

我尝试了以上所有内容,但我的Visual Studio 2012仍未显示测试结果。最后我去了一个测试类,发现它有一个RootNamespace.FolderName,我删除了.FolderName把这个类放在root命名空间中,并且bingo所有的测试都回来了!

直到前几天才能理解为什么它与原始命名空间一起工作正常。

答案 48 :(得分:-1)

您可以右键单击测试方法,然后选择“运行测试/运行单元测试”选项。这应该会打开测试窗口。