170

编辑 2016-10-19:

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

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

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


原始问题2015-04-10:

从昨天开始,我的 Visual Studio 测试资源管理器不会发现我的任何项目的测试。它也不会在构建后显示绿色加载条。

当我转到 Visual Studio 测试资源管理器并单击“全部运行”时,或者当我右键单击任何测试方法并选择“运行测试”时,我会在输出窗口中看到以下内容:

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) 上发现了一个看起来相似的问题:Cannot get tests found #295,来自 xunit 团队的评论:

请注意,据报道,Visual Studio 2015 CTP 5 已被许多进行一般单元测试的人(不仅仅是 xUnit.net)破坏,所以不要指望它会起作用。

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

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

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

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

4

46 回答 46

157

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

注意:这个路径一般在C:\Users\(yourusername)\AppData\Local\Temp

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

于 2015-06-22T23:20:37.563 回答
92

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

Test > Test Settings > Default Processor Architecture > X64
于 2015-12-05T17:20:17.027 回答
68
  • 检查是否在 VisualStudio 中安装了NUnit 测试适配器 2/3 。
    (Tools>Extensions and Updates )

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

于 2016-01-27T16:53:23.170 回答
35

编辑 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
于 2015-04-12T12:41:55.333 回答
22

这个问题的一个原因是您的测试类不是公开的。MSTest 仅从公共类中发现测试。

于 2017-03-11T02:20:36.637 回答
15

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

于 2017-02-08T09:59:57.427 回答
9

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

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

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

于 2015-05-14T21:50:32.773 回答
9

我有一个实例,其中一些测试不会被选中,因为我将它们制作async如下:

public async void This_IsMy_UnitTest()

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

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

public async Task This_IsMy_UnitTest()

更新后,单元测试被发现并正常工作。这可能是一个极端情况,但是在内部进行async测试await但签名不正确可能会导致同样的问题,这不是我第一次这样做。

于 2016-11-04T19:21:21.113 回答
8

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

在此处输入图像描述

于 2016-12-28T15:22:05.390 回答
6

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

于 2017-02-23T11:18:21.847 回答
6

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

于 2016-03-07T11:01:21.403 回答
5

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

于 2016-09-11T06:07:18.897 回答
5

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

“扩展和更新”出现在“工具”菜单下

于 2017-08-18T04:55:56.047 回答
4

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

[TestMethod]
public bool TestSomething()

更改返回类型以void解决问题。

于 2016-11-30T04:12:08.470 回答
4

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

于 2016-10-04T20:38:06.270 回答
4

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

于 2015-09-03T19:56:03.350 回答
3

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

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

[TestClass]
class ClassificationTests
{
   //unit tests
}

一旦我将public修饰符添加到类中,它就按预期工作了!

于 2017-05-10T17:55:06.873 回答
3

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

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

于 2017-03-09T15:59:43.927 回答
2

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

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

于 2017-11-26T15:20:10.870 回答
2

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

My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type
于 2017-09-05T17:39:39.103 回答
2

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

如果您正在测试 .NET Core 或 .NET Standard 项目,建议从 NuGet 安装适配器。VSIX 适配器不支持,也不会支持 .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

于 2017-11-23T16:50:31.583 回答
1

我也被这个美妙的小功能所吸引,这里描述的没有任何东西对我有用。直到我仔细检查了构建输出并注意到相关项目没有被构建。访问配置管理器证实了我的怀疑。

Visual Studio 2015 愉快地允许我添加新项目,但认为不值得构建它们。一旦我将项目添加到构建中,它就开始运行良好。

于 2017-02-28T16:28:43.197 回答
1

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

于 2017-04-27T04:23:19.453 回答
1

这个话题有些过时了,但是我对VS2015中缺少测试状态的解决方案:

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

于 2017-02-01T20:53:27.217 回答
1
  1. 将 nunit.framework 更新到最新版本。
  2. 从 nuget 下载 nunit 测试适配器
  3. 重启视觉工作室
于 2020-03-02T09:22:05.637 回答
1

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

于 2016-08-22T19:43:05.440 回答
1

我很容易解决这个问题:

  • 选择您的单元测试项目
  • 单击解决方案资源管理器中的“显示所有文件”按钮,新的临时文件出现在解决方案资源管理器的文件树中的“obj\x86\Debug”中。
  • 删除这些临时文件并重建项目。
  • 重试运行测试并工作!
于 2018-01-26T12:14:01.667 回答
1

通过意识到我的测试项目的目标框架与被测项目不同,我解决了这个问题。是的,我通过更改默认的目标框架(项目>属性>应用程序)引起了这个问题,但是对于几周后创建的测试项目,这个问题没有解决。不匹配不会导致编译器错误,但会导致“错误列表”窗口中出现警告。一旦我选择了显示警告的选项,解决方案就很明显了。

于 2018-11-13T22:32:46.560 回答
1

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

于 2016-12-27T11:13:12.367 回答
1

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

Resharper 的测试发现工作得很好,但 VS 测试资源管理器惨败。

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

删除所有 Microsoft.VisualStudio.Test* 引用,然后添加/更新两个 MSTest NuGet 解决了该问题。

于 2018-08-15T16:16:22.233 回答
1

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

于 2016-12-15T19:57:27.840 回答
0

我在 VSTest 框架和我的本机单元测试中遇到了同样的问题。

因此,在完成您之前提到的所有这些事情之后,我删除了解决方案目录路径中所有出现的“#”符号。它确实有效。

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

于 2016-10-29T12:38:10.857 回答
0

在 VS 输出窗格(切换到测试视图)中,出现以下错误:

无法加载文件或程序集 '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/

于 2017-08-02T16:28:10.650 回答
0

花了 2 天后......以上都不适合我。唯一的“解决方案”是:转到项目属性-> 构建选项卡。然后单击窗格右下角的高级按钮。将“调试信息:”更改为“完整”,然后单击“确定”。

以下是屏幕截图: 在此处输入图像描述

在此处输入图像描述在此处输入图像描述

于 2017-06-18T20:35:31.207 回答
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;
        }
    }

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

public TestContext TestContext;

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

于 2017-06-06T12:39:25.003 回答
0

禁用 Windows Defender 服务。立即关闭它会导致我的所有单元测试都显示在测试资源管理器中。

于 2017-06-26T18:11:33.373 回答
0

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

改变:public async void Test()

至:public async Task Test()

于 2017-03-10T17:00:42.713 回答
0

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

在我的案例中,未找到特定项目的测试,因为它的输出目录不包含在项目目录中,更改此设置可确保找到测试。

于 2017-04-12T08:05:22.623 回答
0

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

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

于 2018-04-27T08:00:10.723 回答
0

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

没有错误或警告。

于 2017-03-13T19:14:55.163 回答
0

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

无论您使用什么测试框架,都应该安装Microsoft.Net.Test.Sdk 。

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

于 2021-02-22T13:28:26.387 回答
0

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

在此处输入图像描述

很可能您使用的是 RELEASE MODE 的配置,它将从配置中删除调试模式设置:

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

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

于 2017-06-05T01:55:59.567 回答
0

确保具有该[TestClass]属性的类是public而不是private

于 2017-02-18T19:53:54.440 回答
0

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

构建 > 清理

构建 > 构建

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

于 2020-06-03T15:30:23.533 回答
0

请注意,我已经对当前答案进行了演练,但没有发现与加载/卸载测试项目有关(在我的案例中有效的技巧,我已经在此处https://stackoverflow.com上的另一个类似问题上回答了它/a/68101958/966557)。

开始了:

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

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

注意:我必须对我的所有测试项目执行此操作。

于 2021-06-23T15:20:07.933 回答
-1

对我来说,升级到 NUnit 3.7 版是可行的。

于 2017-06-28T02:17:56.010 回答