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
withxunit.runner.visualstudio v2.1.0-beta1-build1051
-
NUnit v2.6.4
与NUnitTestAdapter 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,所以不幸的是我不知道哪一个实际上导致了问题。
这些是我采取的确切步骤:
- closuresVisual Studio
- 使用CCleaner清除系统和浏览器
temp
文件/文件夹 -
手动清除/删除以下文件/文件夹:
-
%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项目来确定一些东西:
- 似乎是官方beta4 aspnet5版本的一部分的
xunit.runner.aspnet : 2.0.0-aspnet-beta4
beta4在Visual Studio中不起作用。 - 相反,使用
"xunit": "2.1.0-*"
和"xunit-runner.dnx": "2.1.0-*"
包可以在Visual Studio中工作。 - 为了让VS发现testing,你的项目必须有一个名为“test”的单行命令,它运行“xunit.runner.dnx”。 添加额外的命令可能会破坏它。
- 如果您的testing浏览器窗口仍然是空的,请从您的项目中删除“testing”命令,然后重新构build解决scheme,然后将“testing”命令添加回到project.json。
- 按照@ 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被发现并正常工作。 这可能是一个边缘的情况下,但具有async
testing使用内部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。
删除文件\ 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不会显示的另一种方式。
没有错误或警告。