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

Fre*_*ver 158 unit-testing xunit test-runner visual-studio-2015 visual-studio-2017

编辑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.0,4.5.24.6.

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

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
  • xunit v2.1.0-beta1-build2945xunit.runner.visualstudio v2.1.0-beta1-build1051
  • NUnit v2.6.4NUnitTestAdapter v2.0.0

我在GitHub(xunit)上发现了一个类似的问题:无法通过xunit团队的评论发现测试#295:

请注意,据报道,Visual Studio 2015 CTP 5被一般的单元测试(不仅仅是xUnit.net)打破了,所以不要指望它可以工作.

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

我尝试了他们的建议删除文件夹%TEMP%\VisualStudioTestExplorerExtensions.不幸的是,这并没有解决问题.

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

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

Rob*_*obM 150

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

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

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

  • @ZéCarlos任何将重要数据存储在`%TEMP%`目录中的应用程序都应该停止工作. (61认同)
  • 或者您只需在"开始运行"菜单中键入"%TEMP%",它就会找到您的临时文件夹,而无需猜测临时值是什么. (29认同)
  • 对你来说并不尴尬,微软彻底失败了,你必须采取如此荒谬的措施来保持1000多美元的IDE运行. (24认同)
  • 在VS2017中也为我工作过! (8认同)
  • 如果您担心清除整个临时目录,只清除Temp\VisualStudioTestExplorerExtensions子目录似乎可以解决问题. (6认同)
  • 我不建议任何人删除此文件夹中的所有内容,没有任何标准.应用程序依赖此文件夹来存储重要数据.您可能会遇到许多应用程序的问题,可能需要重新安装它们才能使其再次正常工作. (2认同)

小智 89

可能是您的代码是使用x64编译的,因此必须将默认处理器体系结构启用为X64.

Test > Test Settings > Default Processor Architecture > X64
Run Code Online (Sandbox Code Playgroud)

  • 这让我咬了几次.即使经过这么多年,我仍然无法想到一个很好的理由,为什么默认情况下不会选择测试设置来自动匹配项目的当前构建配置.对我来说,似乎是毫无意义的重复配置. (2认同)

Mic*_*ack 66

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

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

  • 这最终对我有用.在尝试了一切之后. (2认同)
  • 还要检查是否使用了正确的扩展名.NUnit 2.x和NUnit 3.x分别有一个. (2认同)

Fre*_*ver 30

编辑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 }
Run Code Online (Sandbox Code Playgroud)

确保事先关闭Visual Studio,之后重启可能是个好主意.

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

原始答案2015-04-12

在彻底清除与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

  • 我从%TEMP%删除了所有内容并且它不起作用,但是当我读到'VisualStudioTestExplorerExtensions'目录(空)时,每个人都完美地工作:-)(当天在底部有一个解决方案) (2认同)

小智 20

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


小智 13

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

  • 按照你的指示,我搜索"nunit"并找到"NUnit 3测试适配器",在"下载"(安装)之后解决了我的问题.在互联网上搜索此问题可在[link]找到其他SO文章(http://stackoverflow.com/questions/25304425/visual-studio-2013-doesnt-discover-unit-tests) (2认同)

Avi*_*rry 9

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

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

根据VS 2015 CTP 6,这是最新的,使用beta4版本,而不是日报.


atc*_*way 9

我有一个实例,其中一些测试不会被选中,因为我已经使它们async像下面这样:

public async void This_IsMy_UnitTest()

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

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

public async Task This_IsMy_UnitTest()

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


Deb*_*ash 8

转到Nuget包管理器并下载Nunit适配器,如下所示.

在此输入图像描述


小智 6

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


sam*_*y34 5

在我的情况下(Visual Studio Enterprise 2015 14.0.25425.01 Update 3,Resharper 2016.2)我只需要从 Build 菜单中做一个干净的解决方案。重建解决方案然后使测试资源管理器“唤醒”并再次找到所有测试。


luk*_*yer 5

只需重新启动 Visual Studio,然后在测试资源管理器中执行"全部运行"...然后发现我的所有测试.


Uma*_* T. 5

我的解决方案就是将NUnit 3 Test Adapter扩展安装到我的Visual Studio 2015中.

  • 好吧,我读了第一个(即stackoverflow.com/a/41364951/6305294),但这与我的答案不同,因为它建议将NUnit Adapter nuget包添加到解决方案或项目中,这无法修复一般所有其他解决方案的问题.关于第二个,我承认我错过了看到它.当问题有两个很多答案时,添加截图可能有助于眼睛抓住它 (2认同)

归档时间:

查看次数:

111021 次

最近记录:

6 年,11 月 前