Visual Studio 2015或2017不会发现单元测试

时间:2015-04-10 11:14:04

标签: unit-testing visual-studio-2015 visual-studio-2017 xunit test-runner

编辑2016-10-19:

最初的问题是关于VS2015 CTP6与XUnit测试运行器特有的问题。从答案中可以清楚地看出,Visual Studio中的单元测试发现存在更广泛的问题,这可能在许多不同的情况下发生。我已经清理了我的问题以反映这一点。

我还在自己的答案中加入了一个脚本,我今天仍然使用这个脚本来解决出现的类似问题。

许多其他答案也证明有助于更好地理解VS测试运行器的复杂性。我感谢人们仍在分享他们的解决方案!


原始问题2015-04-10:

从昨天开始,我的Visual Studio Test Explorer将不会发现任何项目的测试。建筑后也没有显示绿色装载栏。

当我转到Visual Studio Test Explorer并单击“全部运行”,或者当我右键单击任何测试方法并选择“运行测试”时,我在输出窗口中显示以下内容:

Could not load file or assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

我在Windows 10 Pro Technical Preview上运行Visual Studio 2015 CTP 6,构建10041. .NET Framework版本似乎并不重要 - 它发生在4.04.5.2和{{1 }}

我尝试使用以下测试框架,所有这些都给出了相同的行为:

  • 4.6
  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0xunit v2.1.0-beta1-build2945
  • xunit.runner.visualstudio v2.1.0-beta1-build1051NUnit v2.6.4

我在GitHub(xunit)上发现了一个类似的问题:Cannot get tests discovered #295,来自xunit团队的评论:

  

请注意,据报道Visual Studio 2015 CTP 5已损坏   很多人通常使用单元测试(不仅仅是xUnit.net),所以   不要指望这样做。

     

此外,请确保您已清理Visual Studio的跑步者   缓存。如果它被破坏,Visual Studio将永久行为不端   直到它被删除。要清除缓存,请关闭所有实例   Visual Studio,然后删除该文件夹   %TEMP%\ VisualStudioTestExplorerExtensions(老实说,它可能   删除%TEMP%中可以删除的所有内容都不会有害。)

我尝试了删除文件夹NUnitTestAdapter v2.0.0的建议。不幸的是,这并没有解决问题。

我注意到ReSharper实际上 能够发现一些测试。它仅适用于VS和NUnit测试,不适用于xunit。

我需要清除某种临时文件或缓存文件夹,但我知道Visual Studio中有很多文件夹,并且不是所有这些文件夹都可以删除而没有不必要的副作用。

45 个答案:

答案 0 :(得分:147)

令我惊讶的是,清除位于%TEMP%目录中的临时文件解决了我的问题。

注意:此路径通常位于C:\Users\(yourusername)\AppData\Local\Temp

如果包含@ Warren-P,您可以通过在“开始”菜单中输入%temp%导航到临时文件夹,或启动“文件资源管理器”并在地址栏中输入%temp%

答案 1 :(得分:86)

可能是您的代码是使用x64编译的,因此必须将默认处理器架构设置为X64。

Test > Test Settings > Default Processor Architecture > X64

答案 2 :(得分:63)

  • 如果在VisualStudio中安装了 NUnit Test Adapter 2/3 ,请查看。
    (Tools>Extensions and Updates )

  • 确保选择正确的处理器架构:
    (Test>Test Settings>Default Processor Architecture)

答案 3 :(得分:29)

编辑2016-10-19(PowerShell脚本)

此问题仍然会不时地返回。我写了一个小的PowerShell片段来自动清除相关的缓存/临时文件夹/文件。我在这里为未来的读者分享:

@(
"$env:TEMP"
"$env:LOCALAPPDATA\Microsoft\UnitTest"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ComponentModelCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\Designer\ShadowCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ImageLibrary\cache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio Services\6.0\Cache"
"$env:LOCALAPPDATA\Microsoft\WebsiteCache"
"$env:LOCALAPPDATA\NuGet\Cache"
) |% { Remove-Item -Path $_ -Recurse -Force }

请务必事先关闭Visual Studio,之后重新启动可能是个好主意。

删除TEMP文件夹可能没有必要,在某些情况下甚至可能不合需要,因此我建议您先尝试不清除TEMP文件夹。只需省略"$env:TEMP"

原始答案2015-04-12

问题已经解决了#34;彻底清除与Visual Studio相关的临时/缓存文件夹后。

由于我没有时间逐个浏览所有内容然后在中间进行测试,我很遗憾不知道哪一个确实导致了问题。

这些是我采取的确切步骤:

  1. 关闭Visual Studio
  2. 使用CCleaner清除系统和浏览器temp文件/文件夹
  3. 手动清除/删除以下文件/文件夹:

    • %USERPROFILE%\AppData\Local\assembly
    • %USERPROFILE%\AppData\Local\Microsoft\UnitTest
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\Designer\ShadowCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ImageLibrary\cache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio Services\6.0\Cache
    • %USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
    • %USERPROFILE%\AppData\Local\NuGet\Cache
    • %USERPROFILE%\AppData\Local\Temp

答案 4 :(得分:20)

此问题的一个原因是您的测试类不公开。 MSTest只发现公共类的测试。

答案 5 :(得分:13)

在Visual Studio 2015(Update 3)中,如果要在测试资源管理器中附加测试,则必须安装 NUnit测试适配器。从工具 - >扩展中下载适配器和更新 - >在线选项卡(您必须搜索适配器) - >下载。 通过重新启动Visual Studio,您可以看到测试框架的更改。

答案 6 :(得分:9)

我对此没有完整的答案,但我通过参加测试项目确定了一些事项:

  1. 似乎是官方beta4 aspnet5版本的一部分的xunit.runner.aspnet : 2.0.0-aspnet-beta4在Visual Studio中不起作用。
  2. 相反,使用"xunit": "2.1.0-*""xunit-runner.dnx": "2.1.0-*"包可以在Visual Studio中工作。
  3. 为了让VS发现测试,你的项目必须有一个名为&#34的单一命令;测试"运行" xunit.runner.dnx"。添加其他命令可能会破坏它。
  4. 如果您的测试资源管理器窗口仍然为空,请删除"测试"从项目中获取命令,然后重新构建解决方案,然后添加" test"命令回到project.json。
  5. 按照@ Fred-Kleuver的建议清除所有缓存可能有所帮助,但我没有完全孤立地完成所有步骤,所以我不确定。
  6. 根据VS 2015 CTP 6,这是最新的,使用beta4版本,而不是日报。

答案 7 :(得分:9)

我有一个实例,其中某些测试无法获取,因为我已将它们设为 async ,如下所示:

public async void This_IsMy_UnitTest()

问题是,当我进行切换时,我忘了让他们返回 Task 而不是 void 。有人会认为这会导致错误或测试失败,但不会。该类中的单元测试完全被忽略,并且表现得像它们不存在一样。

在大约3次清理并构建+重新启动VS.NET后,我看到测试运行并失败,表示我忘记添加Task返回类型:

public async Task This_IsMy_UnitTest()

更新后,发现单元测试并正常工作。这可能是一个边缘情况,但是使用async进行await测试但没有签名正确可能导致同样的问题,这不是我第一次这样做。

答案 8 :(得分:8)

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

enter image description here

答案 9 :(得分:5)

我的解决方案就是将 NUnit 3测试适配器扩展安装到我的Visual Studio 2015中。

'Extensions and Updates' is present under 'Tools' meue

答案 10 :(得分:5)

我有相同的内容,但我的机器上不存在文件夹“%TEMP%\ VisualStudioTestExplorerExtensions”,因此当我阅读帖子时,我有想法创建它并且它有效。测试资源管理器现在能够显示我的所有测试。 感谢。

答案 11 :(得分:4)

就我而言(Visual Studio Enterprise 2015 14.0.25425.01 Update 3,Resharper 2016.2)我只需要从Build菜单中执行 clean solution 。重建解决方案然后使测试资源管理器“唤醒”并再次找到所有测试。

答案 12 :(得分:3)

就我而言,VS 2015下的MSTest忽略了测试(即方法)名称长度超过174个字符的测试。缩短名称可以使测试可见。这是通过操纵测试名称通过猜测和检查来确定的。

答案 13 :(得分:3)

我想补充一点,我找到了与上述完全不同的解决方案。

我已将我的测试类声明如下:

[TestClass]
class ClassificationTests
{
   //unit tests
}

只要我将public修饰符添加到类中,它就会按预期工作!

答案 14 :(得分:3)

在我的情况下,问题出现在椅子和键盘之间"。我已切换到Configuration Manager中的配置,该配置未包含构建时的单元测试项目。切换回包含修复问题的所有项目的配置(例如Debug)。

答案 15 :(得分:3)

确保您的测试项目packages.config中包含 xunit.runner.visualstudio 包,并且该包已正确恢复。

我知道这不是原始问题的情况,但它可以为像我这样的人节省时间。

答案 16 :(得分:3)

这可能对大多数人没有帮助,但是对单元测试缺乏经验的人编写了一个返回bool而不是void的测试方法:

[TestMethod]
public bool TestSomething()

将返回类型更改为void解决了问题。

答案 17 :(得分:2)

如果您的目标是.NET Standard或.NET Core,则需要对NUnit测试适配器使用 NuGet包,而不使用扩展

  

如果您正在测试.NET Core或.NET Standard项目,建议从NuGet安装适配器。 VSIX适配器不支持.NET Core,也不支持.NET Core,因为VSIX包不能以多个平台为目标。

来源:NUnit GitHub Wiki

另请查看常见问题解答:

  

我的测试没有出现在Visual Studio 2017中?

     
      
  • 您使用的是NuGet套餐吗?
  •   
  • 您使用的是3.8.0或更新的NuGet包吗?
  •   
  • 您的测试是针对.NET Core还是完整的.NET Framework? (见上文)
  •   
  • 您是否已向Microsoft.NET.Test.Sdk添加了包参考?
  •   
  • 您重启了Visual Studio吗?它仍然有点温和。
  •   

来源:NUnit GitHub Wiki

答案 18 :(得分:1)

  1. 将nunit.framework更新到最新版本。
  2. 从nuget下载nunit测试适配器
  3. 重新启动Visual Studio

答案 19 :(得分:1)

不知何故,我的项目被设置为编译为静态库(.lib)。将此更改为动态库(.dll)后,测试Visual Studio 2012正确发现的位置。

My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type

答案 20 :(得分:1)

这发生在我身上,因为我的测试项目包含app.config。  它是由NuGet包自动添加的,用于程序集重定向,但是没有它我的测试似乎运行正常。

请参阅:https://developercommunity.visualstudio.com/comments/42858/view.html

答案 21 :(得分:1)

我很容易将问题解决为:

  • 选择您的单元测试项目
  • 点击“显示所有文件”'解决方案资源管理器中的按钮和新的临时文件出现在解决方案资源管理器的文件树中,位于< obj \ x86 \ Debug'内。
  • 删除这些临时文件并重建项目。
  • 重新开始测试并且工作了!。

答案 22 :(得分:1)

我们遇到了同样的问题。我们有一个大型VS 2015解决方案,其中包含多个C#项目以及更多测试项目。

Resharper的测试发现工作正常,但VS Test Explorer失败了。

事实证明,这些项目没有相同版本的MsTest TestFramework和TestAdapter,有时它们使用NuGets和其他时候很好的旧引用,并且显然不支持(对于如此昂贵的IDE来说是如此)。

删除所有Microsoft.VisualStudio.Test *参考,然后添加/更新两个MSTest NuGets可以解决此问题。

答案 23 :(得分:1)

我通过将X64更改为: 右键单击项目 - >属性 - >构建 - >平台目标 - >任何CPU

答案 24 :(得分:1)

弹出来分享我的解决方案。我在Windows 10,Visual Studio 2015,NUnit 3.5,NUnit测试适配器3.6(通过NuGet,而不是VISX扩展),我的测试都没有被发现。我的问题是在我的解决方案的测试项目中,在项目文件夹中创建了我的“Documents”文件夹的快捷方式。我猜测测试适配器正在看快捷方式,并试图弄清楚如何处理它,导致无法显示单元测试。

答案 25 :(得分:1)

我也被这个奇妙的小功能所困扰,这里没有任何描述对我有用。直到我仔细检查构建输出并注意到相关的项目没有被构建之前,它才结束。访问配置管理员证实了我的怀疑。

Visual Studio 2015很高兴允许我添加新项目,但认为不值得建立它们。一旦我将项目添加到构建中,它就开始很好地播放了。

答案 26 :(得分:1)

删除文件\ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ 1033 \ SpecificFold erCache.xml为我解决了这个问题。

答案 27 :(得分:0)

请注意,我已经对当前的答案进行了演练,但没有发现与加载/卸载测试项目相关的问题(这个技巧在我的案例中有效,我已经在 SO here {{3} }).

我们开始:

<块引用>

我也遇到了同样的问题,作为一种解决方法,我卸载了我的测试 项目然后重新加载回来;然后再次运行测试。这一次 刷新了测试资源管理器 :)

我的 VS 版本:VS Professional 2019 版本 16.9.6。

注意:我必须对所有测试项目都这样做。

答案 28 :(得分:0)

对我来说,解决方案是清理并重建测试项目

构建>清理

构建>构建

我在上面的答案中没有读到这,这就是为什么我添加它的原因:)

答案 29 :(得分:0)

我通过意识到测试项目的目标框架与被测试项目不同来解决了这个问题。是的,我是通过将目标框架更改为默认值(“项目”>“属性”>“应用程序”)而导致此问题的,但是对于测试项目而言却未能做到这一点,该项目是在几周后创建的。不匹配不会导致编译器错误,但会在错误列表窗口中导致警告。一旦选择显示警告的选项,解决方案就显而易见了。

答案 30 :(得分:0)

我相信您已经发现了问题,但在我的情况下,帮助简单地安装了 Microsoft.NET.Test.Sdk。确保将其添加到测试项目中。我花了几天时间试图解决这个问题,就这么简单。

无论您使用什么测试框架,都应该安装

Microsoft.Net.Test.Sdk

https://i.imgur.com/Ol6AoOm.png

答案 31 :(得分:0)

唯一对我有用的是: 删除C:\ Users(yourusername)\ AppData \ Local \ Temp

其他建议通常有效。 但由于某种原因,如果VS没有接收到您的更改并且在输出中继续吠叫它无法发现测试,清理此目录可以解决问题。 并且,是的,它可能只是“有一天”你启动,你的解决方案都不会再有效了,“昨天”一切都运转正常。

答案 32 :(得分:0)

这个主题有点过时了,但是我在VS2015中解决了缺少的测试状态:

任务状态仅显示在Debug buildconfiguration上。当然,这也使得无法通过测试资源管理器调试您的测试。

答案 33 :(得分:0)

我正在为VSTest框架和我的原生单元测试遇到同样的问题。

所以,在完成你之前提到的所有事情之后,我删除了解决方案目录路径中出现的每个'#'符号。它确实有效。

我将把它留给那些将来会发现这个问题的谷歌。

答案 34 :(得分:0)

在VS Output窗格中(切换到Test视图),出现此错误:

无法加载文件或程序集“XXX.UnitTest,Version = 9.4.0.0,Culture = neutral,PublicKeyToken = 14345dd3754e3918”或其中一个依赖项。强名称验证失败。 (HRESULT异常:0x8013141A)

在测试项目的项目设置中,在“签名”选项卡下,有人检查了“签署程序集”。取消选中该项并进行构建会导致测试显示。

一位同事也通过将此帖子中的密钥添加到注册表来解决了同样的问题:

https://blogs.msdn.microsoft.com/keithmg/2012/03/20/strong-name-validation-failed-exception-from-hresult-0x8013141a/

答案 35 :(得分:0)

禁用Windows Defender服务。立即关闭此功能会导致我的所有单元测试都显示在Test Explorer中。

答案 36 :(得分:0)

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

以下是截图: enter image description here

enter image description here enter image description here

答案 37 :(得分:0)

我有同样的问题。 Visual Studio 2015(Update 3)的单元测试模板生成一个具有TestContext属性的类,该属性定义如下:

    private TestContext testContextInstance;

    /// <summary>
    ///Gets or sets the test context which provides
    ///information about and functionality for the current test run.
    ///</summary>
    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }

将其更改为公共字段(ungly)后,测试运行器可以发现测试。

public TestContext TestContext;

非常奇怪的行为,但在我的案例中,这是问题的原因。

答案 38 :(得分:0)

如果您正在使用多个App或Web.Config文件。例如:

enter image description here

你可能正在使用一个RELEASE MODE的Config,它将从配置中删除Debug模式设置:

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />

将配置更改为不删除调试模式的配置。

答案 39 :(得分:0)

我遇到了同样的问题。我刚刚清理并重建了项目,我能够看到缺少的测试。

答案 40 :(得分:0)

我想补充一个原因,可能找不到测试,在我的情况下,它涉及未找到的C ++单元测试。

在我的情况下,没有找到特定项目的测试,因为它的输出目录未包含在项目目录中,更改此项可确保找到测试。

答案 41 :(得分:0)

确保您的测试方法没有参数。这是您的测试不会出现的另一种方式。

没有错误或警告。

答案 42 :(得分:0)

我错误地创建了异步方法但返回了void。

已更改:public async void Test()

收件人:public async Task Test()

答案 43 :(得分:0)

确保具有[TestClass]属性的班级公开而不是私人

答案 44 :(得分:-1)

我升级到NUnit的3.7版本。