Visual Studio 2015不会发现unit testing

编辑2016-10-19:

原来的问题是关于一个针对VS2015 CTP6与XUnittesting跑步者的问题。 从答案中可以清楚地看到,Visual Studio中的unit testing发现在很多不同的情况下可能会出现更广泛的问题。 我清理了我的问题来反映这一点。

我还在自己的答案中包含了一个脚本,我仍然使用它来解决类似的问题。

许多其他答案也certificate有助于更好地理解VStesting跑步者的错综复杂。 我明白,人们仍然在分享他们的解决scheme!


原始问题2015-04-10:

从昨天起,我的Visual Studio Test Explorer将不会发现我的任何项目的testing。 它不会在build筑后显示绿色的加载栏。

当我去Visual Studio的testing资源pipe理器,并单击“全部运行”,或者当我右键单击任何testing方法,并select“运行testing”,我得到以下在我的输出窗口中:

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.2和4.6

我试着用下面的testing框架,他们都给出了相同的行为:

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

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

请注意,Visual Studio 2015 CTP 5已经被大多数unit testing人员(不仅仅是xUnit.net)所破解,所以不要期望这样做。

另外,请确保清除了Visual Studio的亚军caching。 如果它被损坏,Visual Studio将永久性地行为不当,直到它被删除。 要清除caching,请closuresVisual Studio的所有实例,然后删除%TEMP%\ VisualStudioTestExplorerExtensions文件夹(说实话,删除%TEMP%中可以删除的所有内容可能不会有什么坏处)。

我试着build议删除文件夹%TEMP%\VisualStudioTestExplorerExtensions 。 不幸的是,没有解决这个问题。

我注意到ReSharper实际上能够发现一些testing。 它只适用于VS和NUnittesting,不适用于xunit。

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

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

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

作为@ Warren-P,您可以通过在开始菜单中input%temp%或启动“文件资源pipe理器”并在地址栏中input%temp%来导航到临时文件夹。

这可能是因为你的代码是用x64编译的,所以必须启用默认处理器架构作为X64。

 Test > Test Settings > Default Processor Architecture > X64 

如果在VisualStudio中安装了NUnittesting适配器 ,请检查一下。 (工具>扩展和更新) http://nunit.org/index.php?p=vsTestAdapter&r=2.6.4

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

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

 @( "$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 } 

确保事先closuresVisual Studio,然后重新启动可能是一个好主意。

删除TEMP文件夹可能不是必要的,并且在某些情况下甚至可能是不受欢迎的,所以我build议不要先清除TEMP文件夹。 只要省略"$env:TEMP"

原文:2015-04-12

彻底清理Visual Studio相关的临时/caching文件夹后,问题“解决”。

由于我没有时间一个接一个地进行testing,然后在两者之间进行testing,所以不幸的是我不知道哪一个实际上导致了问题。

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

  1. closuresVisual 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

我没有一个完整的答案,但是我通过玩一个testing项目来确定一些东西:

  1. 似乎是官方beta4 aspnet5版本的一部分的xunit.runner.aspnet : 2.0.0-aspnet-beta4 beta4在Visual Studio中不起作用。
  2. 相反,使用"xunit": "2.1.0-*""xunit-runner.dnx": "2.1.0-*"包可以在Visual Studio中工作。
  3. 为了让VS发现testing,你的项目必须有一个名为“test”的单行命令,它运行“xunit.runner.dnx”。 添加额外的命令可能会破坏它。
  4. 如果您的testing浏览器窗口仍然是空的,请从您的项目中删除“testing”命令,然后重新构build解决scheme,然后将“testing”命令添加回到project.json。
  5. 按照@ Fred-Kleuver的build议清理所有的caching可能会有所帮助,但是我并没有单独完成所有的步骤,所以我不确定。

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

在Visual Studio 2015(Update 3)中,如果要在testing浏览器中附加testing,则必须安装NUnittesting适配器。从Tools-> Extension And Updates-> Online选项卡下载适配器(必须search适配器) – >下载 。 通过重新启动Visual Studio,您可以看到testing框架的更改。

造成这个问题的原因之一是你的testing课不公开。 MSTest只发现公共类的testing。

我有一个例子,一些testing不会被拿起,因为我已经使他们async如下:

public async void This_IsMy_UnitTest()

问题是我忘了让他们返回一个Task而不是void当我做了切换。 有人会认为这会导致错误或testing失败,但不是。 那个class里的unit testing完全被忽略了,并且performance得像他们不存在的那样。

这不是大约3干净,并build立+重新启动VS.NET ,我看到testing运行和失败,说明我忘了添加Task返回types:

public async Task This_IsMy_UnitTest()

更新之后,unit testing被发现并正常工作。 这可能是一个边缘的情况下,但具有asynctesting使用内部await但没有签名正确可以导致这个相同的问题,这不是我第一次做到这一点。

我有相同的话筒,但文件夹“%TEMP%\ VisualStudioTestExplorerExtensions”在我的机器上不存在,所以当我阅读post,我有想法来创build它,它的工作原理。 testing浏览器现在能够显示我所有的testing。 谢谢。

在我的情况下(Visual Studio Enterprise 2015 14.0.25425.01更新3,Resharper 2016.2)我只需要从生成菜单做一个干净的解决scheme 。 重build解决scheme,然后导致testing浏览器“醒来”,再次find所有的testing。

转到Nuget包pipe理器并按照下面的步骤下载Nunit适配器。

在这里输入图像说明

在我的情况下,问题是“椅子和键盘之间”。 我已经在configurationpipe理器中切换到一个configuration,其中没有包含我的unit testing项目的构build。 切换回configuration(如debugging),其中包括所有项目解决了问题。

在我的情况下,VS 2015下的MSTest忽略了长于174个字符的testing(即方法)名称的testing。 缩短名称使testing可见。 这是通过猜测和检查通过操纵testing名称来确定的。

这可能不会帮助大多数人,但是在unit testing方面没有经验的人已经写了一个返回bool而不是void的testing方法:

 [TestMethod] public bool TestSomething() 

将返回types更改为void可解决问题。

只需重新启动 Visual Studio,并在testing资源pipe理器中执行“全部运行”…我的所有testing都被发现了。

确保在testing项目packages.config中包含xunit.runner.visualstudio软件包,并且正确地还原了该软件包。

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

我只想补充一点,我发现了一个完全不同的解决scheme。

我已经宣布我的testing类如下:

 [TestClass] class ClassificationTests { //unit tests } 

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

在我的情况下,解决scheme只是安装NUnit 3testing适配器扩展到我的Visual Studio 2015。

'Tools'meue下有'Extensions and Updates'

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

我犯了创buildasynchronous方法的错误,但返回void。

更改: public async void Test()

To: public async Task Test()

我解决了它通过更改X64:右键单击项目 – >属性 – >生成 – >平台目标 – >任何CPU

花了两天后…以上都没有为我工作。 唯一的“解决scheme”是:转到项目属性 – >生成选项卡。 然后点击窗格右下angular的高级button。 将“debugging信息:”更改为“完整”,然后单击确定。

这里是屏幕截图: 在这里输入图像说明

在这里输入图像说明 在这里输入图像说明

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

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

我有同样的问题。 我只是清理和重build项目,我能够看到缺less的testing。

我正在为VSTest框架和我的本地unit testing挣扎。

因此,在完成之前提到的所有这些事情之后,我删除了解决scheme的目录path中出现的每个“#”符号。 它实际上工作。

我将把它留在这里,以便未来能够find这个问题的Google员工。

跳出来分享我的解决scheme。 我在Windows 10,Visual Studio 2015,NUnit 3.5,NUnittesting适配器3.6(通过NuGet,而不是VISX扩展),我的testing都没有被发现。 我的问题是,在我的解决scheme的testing项目,不知何故在项目文件夹中创build了我的“文档”文件夹的快捷方式。 我猜测testing适配器正在看到快捷方式,并试图弄清楚如何处理它,导致显示unit testing失败。

这个主题有些过时,但是我对VS2015中缺lesstesting状态的解决scheme:

任务状态只显示在Debug buildconfiguration中。 当然这也使得不可能通过testing浏览器来debugging你的testing。

确保你的类与[TestClass]属性是公共的而不是私人的

我也被这个奇妙的小function咬了,这里没有任何描述为我工作。 直到我再次检查build筑产量,并注意到有关的项目没有build成。 访问configurationpipe理器证实了我的怀疑。

Visual Studio 2015高兴地允许我添加新的项目,但决定不值得构build它们。 一旦我将这些项目添加到构build中,它就开始好玩了。

确保你的testing方法没有参数。 这是您的testing不会显示的另一种方式。

没有错误或警告。