Visual Studio 2015不会发现单元测试

ut_eos 发布于 2019-07-02 c# 最后更新 2019-07-02 13:20 229 浏览

编辑2016-10-19: 最初的问题是关于与XUnit测试跑步者VS2015 CTP6相关的问题。从答案中可以明显看出,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.24.6上。 我尝试了以下测试框架,并且它们都具有相同的行为:
  • 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.4 with NUnitTestAdapter v2.0.0

我在GitHub(xunit)上发现了一个类似的问题:Cannot get tests discovered #295,来自xunit团队的评论:
Be aware that Visual Studio 2015 CTP 5 has been reported to be broken by many people with unit testing in general (not just xUnit.net), so don't expect that to work. Also, please make sure you've cleaned out Visual Studio's runner cache. If it gets corrupted, Visual Studio will permanently misbehave until it's deleted. To clear the cache, shut down all instances of Visual Studio, then delete the folder %TEMP%\VisualStudioTestExplorerExtensions (honestly, it probably wouldn't hurt to delete everything in %TEMP% that can be deleted).
我尝试了他们的建议来删除文件夹%TEMP%\VisualStudioTestExplorerExtensions。不幸的是,这并没有解决问题。 我注意到ReSharper实际上能够发现一些测试。它只适用于VS和NUnit测试,不适用于xunit。 必须要有某种需要清除的临时文件或缓存文件夹,但我知道Visual Studio中有很多这样的文件夹,但并不是所有这些文件夹都可以被删除而没有不必要的副作用。
已邀请:

jvitae

赞同来自:

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

iid

赞同来自:

我想补充一点,我找到了与上述完全不同的解决方案。 我已经宣布我的测试类如下:

[TestClass]
class ClassificationTests
{
   //unit tests
}
只要我将public修饰符添加到类中,它就会按预期工作!

ksequi

赞同来自:

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

xeos

赞同来自:

我有一个实例,其中一些测试不会被选中,因为我已将它们变为async,如下所示: public async void This_IsMy_UnitTest() 问题是我忘了让他们在切换时返回Task而不是void。有人会认为这会导致错误或测试失败,但不会。该类中的单元测试完全被忽略,并且表现得像它们不存在一样。 在大约3次清理并构建+重新启动VS.NET后,我看到测试运行并失败,表明我忘记添加Task返回类型: public async Task This_IsMy_UnitTest() 更新后,单元测试被找到并正常工作。这可能是一个边缘情况,但async测试使用await但没有签名正确可能导致同样的问题,这不是我第一次这样做。

eea

赞同来自:

确保具有[TestClass]属性的类是公共的而不是私有的。

tin

赞同来自:

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

Test > Test Settings > Default Processor Architecture > X64

ciste

赞同来自:

如果在Visual Studio中安装了NUnit Test Adapter,请查看。 (工具>扩展和更新) CODE_0的PLACEHOLDER

khic

赞同来自:

我正在为VSTest框架和我的原生单元测试遇到同样的问题。 所以,在完成你之前提到的所有这些事情后,我删除了解决方案目录路径中出现的每个'#'符号。它确实有效。 我将它留在这里为将来会发现这个问题的googlers。

bdicta

赞同来自:

如果您正在使用多个App或Web.Config文件。例如: enter image description here 您可能正在使用RELEASE MODE的Config,它将从配置中删除调试模式设置:

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
将配置更改为不删除DEBUG MODE的配置。

adolor

赞同来自:

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

gautem

赞同来自:

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

kaut

赞同来自:

对我来说,升级到NUnit的3.7版就可以了。

riure

赞同来自:

我遇到过同样的问题。 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;
非常奇怪的行为,但这是我的问题的原因。

equia

赞同来自:

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

pculpa

赞同来自:

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

funde

赞同来自:

这个主题有点过时了,但我在VS2015中解决了缺少的测试状态: 任务状态仅显示在Debug构建配置中。当然,这也使得无法通过测试资源管理器调试您的测试。

hhic

赞同来自:

令我惊讶的是,清除位于%TEMP%目录中的临时文件解决了我的问题。 注意:此路径通常位于C:\Users(yourusername)\AppData\Local\Temp 如果包含@ Warren-P,您可以通过在开始菜单中输入%temp%导航到临时文件夹,或启动“文件资源管理器”并在地址栏中输入%temp%

overo

赞同来自:

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

cet

赞同来自:

我也被这个精彩的小功能所困扰,这里没有任何描述对我有用。直到我仔细检查了构建输出并注意到相关项目没有被构建。访问配置管理员证实了我的怀疑。 Visual Studio 2015很高兴地允许我添加新项目,但认为不值得构建它们。一旦我将项目添加到构建中,它就开始很好地播放了。

hrerum

赞同来自:

在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/

set

赞同来自:

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

[TestMethod]
public bool TestSomething()
将返回类型更改为void可解决问题。

jfugit

赞同来自:

我犯了创建异步方法但返回void的错误。 更改:public async void Test() 收件人:public async Task Test()

jalias

赞同来自:

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

grem

赞同来自:

在我的案例中,解决方案只是将NUnit 3 Test Adapter扩展安装到我的Visual Studio 2015中。 'Extensions and Updates' is present under 'Tools' meue

nut

赞同来自:

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

gqui

赞同来自:

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

dquia

赞同来自:

我想补充一个原因,可能找不到测试,在我的情况下,它涉及未找到的C++单元测试。 在我的情况下,没有找到特定项目的测试,因为它的输出目录未包含在项目目录中,更改此项可确保找到测试。

peum

赞同来自:

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

hvelit

赞同来自:

确保您的测试项目packages.config中包含xunit.runner.visualstudio包,并且该包已正确恢复。 我知道这不是原始问题的情况,但它可以节省像我这样的人的时间。

ret

赞同来自:

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

baut

赞同来自:

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

eos_et

赞同来自:

就我而言,问题是“在椅子和键盘之间”。我已经切换到Configuration Manager中的配置,该配置不包括我在构建时的单元测试项目。切换回包含修复该问题的所有项目的配置(例如,调试)。

psed

赞同来自:

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

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

faut

赞同来自:

如果您的目标是.NET Standard或.NET Core,则需要将NuGet包用于NUnit Test Adapter而不是扩展。

It is recommended to install the adapter from NuGet if you are testing .NET Core or .NET Standard projects. The VSIX adapter does not, and will not, support .NET Core because VSIX packages cannot target multiple platforms.
资料来源:NUnit GitHub Wiki 。 另请查看常见问题解答:
My tests aren't showing up in Visual Studio 2017?
  • Are you using the NuGet package?
  • Are you using version 3.8.0 or newer of the NuGet package?
  • Do your tests target .NET Core or the full .NET Framework? (see above)
  • Have you added a Package Reference to Microsoft.NET.Test.Sdk?
  • Have you restarted Visual Studio? It is still a bit tempermental.
资料来源:NUnit GitHub Wiki

lmagni

赞同来自:

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

aet

赞同来自:

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

  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发现测试,你的项目必须有一个名为“test”的SINGLE命令,它运行“xunit.runner.dnx”。添加其他命令可能会破坏它。
  4. 如果您的测试资源管理器窗口仍然为空,请从项目中删除“test”命令,然后重新构建解决方案,然后将“test”命令添加回project.json。
  5. 根据@ Fred-Kleuver的建议清除所有缓存可能有所帮助,但我没有完全孤立地完成所有步骤,所以我不确定。
根据VS 2015 CTP 6,这是最新的,使用beta4版本,而不是日报。

dodit

赞同来自:

这发生在我身上,因为我的测试项目包含一个app.config。  它是由NuGet包自动添加的,用于程序集重定向,但是没有它我的测试似乎运行良好。 请参阅:https://developercommunity.visualstudio.com/comments/42858/view.html

dsit

赞同来自:

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