Visual Studio 2013没有发现单元测试

时间:2014-08-14 09:17:10

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

我在visual studio 2013中有一个简单的解决方案,它由一个Web项目,一个库项目和一个单元测试项目组成。当我打开解决方案并尝试运行单元测试时,它们不会被visual studio发现。要运行测试,我尝试转到菜单并选择测试 - >运行 - >运行所有测试或打开测试资源管理器窗口。通过这些方法,visual studio不会在解决方案中发现任何测试。

首先创建一个简单的单元测试项目并尝试运行测试,visual studio知道发现测试并且我可以运行它。然后,如果我打开我以前的解决方案,visual studio现在会发现所有的测试。我尝试保存我的解决方案,但关闭它并重新打开,而不首先创建单元测试项目,visual studio没有再次找到测试。这是一个非常奇怪的行为,我不知道为什么会发生这种情况。

我曾经独自在这个项目中工作,该项目使用了与visual studio团队基础集成的源代码控制git。当一个新元素进入项目并且我需要通过在线源控件重新创建解决方案时,visual studio不会发现单元测试的问题就开始了。在此之前,所有测试总是由visual studio发现。

为了创建单元测试,我使用了dll Microsoft.VisualStudio.QualityTools.UnitTestFramework。我的Visual Studio版本是:Microsoft Visual Studio Express 2013 for Web Version 12.0.30723.00 Update 3.我的.net框架版本是4.5.50938。

我所有的测试都是这样的:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}

38 个答案:

答案 0 :(得分:208)

有些事情我已经注意到我必须时不时地让测试正确显示。

  1. 如果您的解决方案位于受保护的驱动器中,您需要管理员访问权限进行读/写,有时只会出现部分测试。在这种情况下,绝对以管理员身份运行VS.

  2. 如果您的解决方案是64位,请确保测试>测试设置>默认处理器体系结构设置为x64。有时它被设置为x86。将其设置为x64,然后重建。

  3. 有时只需重新启动Visual Studio即可,因为测试资源管理器会重新启动。

  4. 不要忘记实际构建测试项目/解决方案。 (如果您希望它与其他项目一起构建,请右键单击您的解决方案&gt;属性&gt;配置属性&gt;配置&gt;检查测试项目的&#34; Build&#34;框<) / p>

  5. 确保测试位于测试类的public部分

答案 1 :(得分:79)

如果您使用NUnit,请务必先下载NUnit Adapter。

转到工具→扩展和更新...→在线→搜索&#34; NUnit测试适配器&#34;。

答案 2 :(得分:59)

确保您的测试类为public,以便找到它。如果您正在引用另一个类,请确保相同。

此外,有时如果您没有Asserts或者您没有使用[TestMethod]装饰测试,则可能无法识别测试。

另外两件事: 1)异步单元测试充其量只是搞笑,而在最坏情况下根本没有。如果您感兴趣,请查看 Stephen Cleary this article并保留其中。

2)如果你使用NUnit并遇到同样的问题,请记住Nunit的[TestCase]而不是[TestMethod]

说完上面的内容,这里是article我在代码项目中发布的MSTest&amp; NUnit,如果你想给它一个旋转,并确保你没有遗漏任何东西。

答案 3 :(得分:28)

我有同样的问题,但其他解决方案都没有。事实证明我正在使用NUnit 3框架和2适配器。

如果您正在使用NUnit 3,请转到扩展和更新并安装NUnit3测试适配器。

答案 4 :(得分:12)

XUnit用户可能会注意到Test Explorer窗口不再列出任何测试。要使测试再次被发现,请尝试this important tip,如下所示。

  

如果您在发现或运行测试时遇到问题,则可能是Visual Studio中损坏的运行时缓存的受害者。要清除此缓存,请关闭所有Visual Studio实例,然后删除文件夹%TEMP%\ VisualStudioTestExplorerExtensions。还要确保您的项目仅链接到单个版本的Visual Studio runner NuGet包(xunit.runner.visualstudio)。

Type in TEMP to find target folder

答案 5 :(得分:11)

我不时遇到这个问题。对我有用的是关闭Visual Studio并转到文件夹:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

并删除其内容。

打开Visual Studio并再次加载项目后,测试资源管理器应该包含您的测试

答案 6 :(得分:5)

对于未来的googlers,我有一个罕见的情况导致了这一点。

在我的基础测试类中,我有一个名为TestContext的属性。这干扰了MSTest保留的TestContext属性,导致我的所有测试都被VS / Resharper隐藏,除了一个(没有从基础继承)。

答案 7 :(得分:4)

对我而言,它正在改变解决方案配置&#39;调试(而不是发布)。

答案 8 :(得分:4)

我的问题是因为我的单元测试方法不是无效,而且它正在接收参数。

答案 9 :(得分:4)

我发现VS Test Explorer未发现标记为clone的单元测试方法。这似乎是因为VS无法等待测试完成并决定它是否成功。如果你绝对需要一个测试方法来异步运行,那么让它返回一个Task,而不是async void。 我发现这解决了我的问题。

答案 10 :(得分:3)

尝试将所有项目构建为MSIL(任何CPU)而不是x86 / x64。奇怪地为我工作

答案 11 :(得分:3)

虽然AndyG的解决方案有效,但更持久的解决方案可能是将PreferredToolArchitecture环境变量设置为&#34; x64&#34;,或者通过以下方式:

How to make Visual Studio use the native amd64 toolchain

或通过:

  • 控制面板|系统和安全|系统|高级系统设置|环境变量
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64

答案 12 :(得分:2)

转到Nuget包管理器并下载Nunit Adapter,如下所示。 enter image description here

答案 13 :(得分:2)

我设法添加我的

public static void TestMethod1(){}

一旦我移除静电就开始工作....

答案 14 :(得分:2)

我遇到了同样的问题,我再次记得(这种情况发生过),选择&#34;混合平台&#34;在解决方案平台菜单上工作,以及其他答案。

答案 15 :(得分:1)

花了2天......以上都没有为我工作。唯一的“解决方案”是:转到项目属性 - &gt;构建选项卡。然后单击窗格右下角的“高级”按钮。将“Debug Info:”更改为“full”,然后单击“确定”。

以下是截图: enter image description here

enter image description here enter image description here

答案 16 :(得分:1)

如果从网络共享我的文档目录(共享)加载Visual Studio(在我的案例中为VS 2015社区)解决方案,您将获得陷入这种麻烦。我通过将解决方案及其底层项目移动到本地文件夹来解决它。

答案 17 :(得分:1)

要在Test Explorer窗口中显示测试,我必须安装NUnit3 Test Adapter 3.0,这在包管理器中是不可用的。

this website

下载

答案 18 :(得分:1)

很抱歉添加到长列表中,但我有一个完全不同的问题。 首先,我想提一下,在测试资源管理器中单击“全部运行”,然后在Visual Studio中查看构建输出窗口时发现了我的问题。你必须积极地观看它,之后消息就会消失。

至于问题,看起来在扫描测试期间,DLL被加载并且枚举了它的测试类型。这会导致加载引用,如果在此过程中发生任何故障,则测试将不会显示在资源管理器中。我有两个问题阻止成功加载测试DLL:

  • 配置文件中仍然存在绑定重定向(重定向到比测试项目中引用的版本更低版本NHiberate)。
  • 冲突的程序集引用(第二级引用无法加载)。 AsmSpy是一个很好的工具来寻找这些。

答案 19 :(得分:1)

为了论证,您只需要说明您需要在测试项目中使用X64架构,以便正确构建依赖项(如我的情况)。您可能需要在测试 - 测试设置菜单下修改默认处理器体系结构。将此设置为X64允许我的测试资源管理器使用Microsoft.VisualStudio.TestTools.UnitTesting查找我的测试。

答案 20 :(得分:1)

我遇到了同样的问题。

这是由于NUnit I的不兼容版本添加到我的项目(3.2.0)和我安装的测试适配器(2.0.0)。

要修复,请使用&#34;工具&gt;扩展和更新&#34;并搜索NUnit3测试适配器,之后发现了我的测试。

干杯

答案 21 :(得分:1)

您只需要安装此软件包:

NUnit TestAdapter NUnit TestAdapter

答案 22 :(得分:1)

转到项目菜单&gt; Configuration Manager检查您的测试项目平台是否与项目的其余部分匹配,并检查构建然后重建。

答案 23 :(得分:1)

刚刚碰到这个,我没有看到类似于我的类似案例。

在我的测试项目的.csproj文件中,NUnit参考隐私设置为False

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

我将<Private>设置为True之后就有效了。

答案 24 :(得分:0)

确保所有项目都使用相同的配置运行。 在您的项目的属性=&gt; Debug =&gt;下拉列表中的平台选择适当的平台(对我而言,它是“任何CPU”),这在您的其他项目中确定。

答案 25 :(得分:0)

在使用 VS2008 的旧项目中遇到了同样的问题。在测试输出窗口中,它不断打印单元测试 DLL 不是 Nunit 测试。我正在使用 https://archive.codeplex.com/?p=nunitforvs 的插件 NunitForVS,是的,我已按照说明将 ProjectTypeGuid 添加到项目文件中。

原来文件夹 \Users\AppData\Roaming\Nunit\ 中的 NunitSettings.xml 文件是空的。

我从看起来完整的 \Users\AppData\local\Nunit\ 文件夹中复制了镜像文件,即使没有重新启动 Studio,它也开始重新发现 Nunit 测试。

希望这对某人有所帮助。

答案 26 :(得分:0)

就我而言,我必须更新两个NuGet软件包。 -MSTest.TestAdapter -MSTest.TestFramework

答案 27 :(得分:0)

确保将项目标记为测试项目。您可以通过将以下 xml 添加到 csproj 项目文件中来实现。

 <Project>
...
 <ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
  </ItemGroup>
...
</Project>

答案 28 :(得分:0)

就我而言,在驱动程序停止进入[SetUp]之后,我将NUnit从2.X更新为3.X.我试图从NuGet安装NUnit 3适配器,但它没有帮助。然后我在TestDriven(3.8)上卸载了我当前的版本并安装了3.10。它开始起作用了(再次)。

答案 29 :(得分:0)

我遇到了同样的问题。 并调查并发现dll不是构建的, 并放入正确的文件夹。一改变我的配置 他们出现了。   - Projects构建选项,应该使用哪个文件夹?   - 构建菜单项构建配置,应该检查它们。

为我修好了。

答案 30 :(得分:0)

我在Visual Studio 2015中遇到了类似的问题。一旦我进行了async Task单元测试,Visual Studio就会开始遇到问题,找到它的来源,它就不会了允许我调试它。

事实证明,有bug with PostSharp会导致此行为,而我正在使用的测试项目启用了PostSharp。

我的解决方案是通过将<PropertyGroup>元素中的以下内容添加到csproj项目文件的开头来禁用单元测试项目的PostSharp:

<SkipPostSharp>True</SkipPostSharp>

答案 31 :(得分:0)

对于Visual Studio 2013.5,清除解决方案中的\ TestResults目录有帮助。 Visual Studio损坏了存储已发现测试的mdf文件,从而阻止了单元测试的发现。

答案 32 :(得分:0)

就我而言,问题是因为我的class被标记为abstract

只需删除abstract关键字。

答案 33 :(得分:0)

我在TFS 2015上的测试遇到了同样的问题。 我遇到的问题是我的测试不再出现了。测试适配器找不到任何测试。 我删除了Microsoft.VisualStudio.QualityTools.UnitTestFramework的所有引用,现在它们再次出现。我希望我的回答可以帮助某人

答案 34 :(得分:0)

  • 我知道如果没有构建解决方案,则找不到单元测试,因此需要尝试(构建解决方案),但该解决方案就像帮助台询问您的计算机是否已插入... < / LI>
  • 干净的重建后没有为我解决问题,运行完整的批量生成确实修复了它。

答案 35 :(得分:0)

有同样的问题;测试突然停止被发现。

Nunit测试适配器已经以某种方式被禁用。单击扩展管理器中的“启用”为我修复了它。

答案 36 :(得分:0)

另一种解决方案:

打开命令提示符,键入set,并验证PROC​​ESSOR_ARCHITECTURE是否设置正确,如果需要,请更改为x86或AMD64。

来源:https://connect.microsoft.com/VisualStudio/feedback/details/873170/vs2012-vstest-console-exe-error-incompatible-target-platform-settings-x86-with-system-architecture-arm-occurs-when-processor-architecture-is-not-set

答案 37 :(得分:0)

我遇到了同样的问题,直到我意识到我做了一个剪切/粘贴错误并在测试前离开了[Test Method]