VisualStudio2015或2017不发现单元测试

编辑2016-10-19:

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

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

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


原问题2015-04-10:

从昨天开始,我的 VisualStudio 测试资源管理器将不会发现任何项目的测试。它也没有显示建成后的绿色装载栏。

当我进入 Visual Studio Test Explorer 并单击“ Run All”,或者当我右键单击任何测试方法并选择“ Run Test”时,我会在输出窗口中看到以下内容:

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.

我在 Windows10专业技术预览版上运行 VisualStudio2015CTP6,构建10041。那个。NET 框架的版本似乎并不重要-它发生在 4.04.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)上发现了一个类似的问题: 无法发现测试 # 295,来自 xunit 团队的评论如下:

请注意,VisualStudio2015CTP5已被报告为中断 很多人通常都进行单元测试(不仅仅是 xUnit.net) ,所以 别指望能成功。

另外,请确保您已经清除了 VisualStudio 的跑步者 如果它被损坏,VisualStudio 将永久性地不正常行为 若要清除缓存,请关闭 VisualStudio,然后删除该文件夹 % TEMP% VisualStudioTestExplorerExtended (老实说,它可能 删除% TEMP% 中可以删除的所有内容不会有什么坏处)。

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

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

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

123556 次浏览

EDIT 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 }

确保事先关闭 VisualStudio,之后重新启动可能是个好主意。

删除 TEMP 文件夹可能是不必要的,在某些情况下甚至是不需要的,因此我建议尝试不首先清除 TEMP 文件夹。省略 "$env:TEMP"

原始答案2015-04-12

在彻底清理了与 VisualStudio 相关的临时/缓存文件夹之后,问题得到了“解决”。

因为我没有时间一个一个地检查所有的东西,然后在中间进行测试,所以很不幸,我不知道究竟是哪一个导致了问题。

以下是我采取的步骤:

  1. 关闭的视觉工作室
  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

对于这个问题,我没有一个完整的答案,但是我通过一个测试项目确定了一些事情:

  1. 似乎是官方 Beta4aspnet5发行版的一部分的 xunit.runner.aspnet : 2.0.0-aspnet-beta4在 VisualStudio 中无法工作。
  2. 相反,使用 "xunit": "2.1.0-*""xunit-runner.dnx": "2.1.0-*"包可以在 VisualStudio 中工作。
  3. 为了让 VS 发现测试,您的项目必须有一个名为“ test”的单一命令,该命令运行“ xunit.runner.dnx”。添加额外的命令可能会破坏它。
  4. 如果您的 Test Explorer 窗口仍然为空,那么从项目中删除“ Test”命令,然后重新构建解决方案,然后将“ Test”命令添加回 project.json。
  5. 按照@Fred-Kleuver 的建议清除所有缓存可能会有所帮助,但我还没有独立完成所有步骤,所以我不确定。

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

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

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

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

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

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

Test > Test Settings > Default Processor Architecture > X64
  • 检查 VisualStudio 中是否安装了 NUnit 测试适配器2/3
    (Tools>Extensions and Updates )

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

我有同样的问题,但文件夹“% TEMP% VisualStudioTestExplorerExtended”不存在于我的机器上,所以当我阅读文章,我有创建它的想法和它的工作。测试探索器现在可以显示我的所有测试。 谢谢。

我也有同样的问题。我只是清理和重建项目,我能够看到缺失的测试。

在我的例子中(Visual Studio Enterprise 201514.0.25425.01 Update 3,Resharper 2016.2) ,我只需要在 Build 菜单中执行一个 干净的溶液。然后,重新生成解决方案将导致测试资源管理器“唤醒”并再次找到所有测试。

在我的例子中,VS 2015下的 MSTest 忽略了测试(即方法)名称超过174个字符的测试。缩短名称可以使测试可见。这是通过操作测试名称通过猜测和检查确定的。

对于 VSTest 框架和我的本机单元测试,我也遇到了同样的问题。

因此,在完成前面提到的所有操作之后,我删除了解决方案目录路径中出现的每一个“ #”符号。真的有用。

我把它留给谷歌人,他们将来会发现这个问题。

我有一个例子,一些测试不会被拿起,因为我已经使他们像下面的 async:

public async void This_IsMy_UnitTest()

问题是我忘记让他们返回一个 Task而不是 void当我做交换。人们可能会认为这会导致错误或测试失败,但事实并非如此。该类中的单元测试被完全忽略,并且表现得好像它们不存在一样。

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

public async Task This_IsMy_UnitTest()

更新之后,找到单元测试并正确工作。这可能是一个边缘情况,但是在 async测试中使用 await,但是没有正确的签名可能会导致同样的问题,这不是我第一次这样做了。

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

[TestMethod]
public bool TestSomething()

将返回类型改为 void修复了这个问题。

突然出现分享我的解决方案。我使用的是 Windows 10,Visual Studio 2015,NUnit 3.5,NUnit Test Adapter 3.6(通过 NuGet,而不是 VISX 扩展) ,我的所有测试都没有被发现。我的问题是,在我的解决方案的测试项目中,在项目文件夹中以某种方式创建了“文档”文件夹的快捷方式。我猜测测试适配器看到了这个快捷方式,并试图弄清楚如何处理它,结果导致显示单元测试失败。

删除文件 AppData Local Microsoft VisualStudio 14.01033 SpeciFold erCache.xml 为我解决了这个问题。

转到 Nuget 软件包管理器并按照下面的步骤下载 Nunit Adapter。

enter image description here

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

任务状态仅显示在 Debug 构建配置中。当然,这也使得不可能通过测试浏览器调试您的测试。

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

确保具有 [TestClass]属性的类是 公众人士而不是 二等兵

只需在 重新开始 Visual Studio 和测试资源管理器中执行“ Run All”... 我的所有测试都会在那时被发现。

我也被这个奇妙的小特点咬了一口,这里描述的东西对我都不起作用。直到我反复检查了构建输出并注意到相关的项目没有被构建。对配置管理器的访问证实了我的怀疑。

VisualStudio2015很高兴地允许我添加新项目,但认为不值得构建它们。一旦我将这些项目添加到构建中,它就开始发挥作用了。

确保在您的测试项目 packages.config 中有 xunit.runner.visualstudio包,并且正确地还原了它。

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

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

更改: public async void Test()

收件人: public async Task Test()

这个问题的一个原因是您的测试类不是公共的。

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

没有错误或警告。

我想再补充一个可能找不到测试的原因,在我的例子中,它涉及到没有找到的 C + + 单元测试。

在我的例子中,没有找到特定项目的测试,因为它的输出目录不包含在项目目录中,更改这个目录可以确保找到测试。

我把 X64改成: 右键单击 project-> Properties-> Build-> Platform target-> Any CPU

我想补充的是,我发现了一个完全不同于上述解决方案。

我申报的测试班级如下:

[TestClass]
class ClassificationTests
{
//unit tests
}

当我将 public修饰符添加到类中时,它就像预期的那样工作了!

如果使用多个 App 或 Web.Config 文件,例如:

enter image description here

很可能你正在使用一个 RELEASE 模式的配置,它会从配置中去除调试模式设置:

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

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

我也有同样的问题。VisualStudio2015(Update3)的单元测试模板生成一个具有 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;

非常奇怪的行为,但这就是我的问题所在。

花了两天的时间,以上这些对我都不管用。唯一的“解决方案”是: 转到 project properties-> Build Tab。然后单击窗格右下角的“高级”按钮。将“ Debug Info:”更改为“ full”并单击 OK。

以下是截图: enter image description here

enter image description hereenter image description here

关闭 Windows Defender 服务,立即导致所有单元测试显示在测试资源管理器中。

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

在 VS Output 窗格(切换到 Test 视图)中,出现了以下错误:

无法加载文件或程序集“ XXX.UnitTest,Version = 9.4.0.0,Culture = none,PublicKeyToken = 14345dd3754e3918”或其依赖项之一。强名称验证失败。(来自 HRESULT T: 0x8013141A 的异常)

在测试项目的项目设置中,在“签名”选项卡下,有人选中了“为程序集签名”。取消检查和构建导致了测试的出现。

一位同事还解决了同样的问题,在登记册中增加了这一职位的关键字:

Https://blogs.msdn.microsoft.com/keithmg/2012/03/20/strong-name-validation-failed-exception-from-hresult-0x8013141a/

在我的例子中,解决方案只是将 NUnit 3测试适配器扩展安装到 VisualStudio2015。

'Extensions and Updates' is present under 'Tools' meue

不知怎么的,我的项目被设置为编译为 静态库(. lib)。将其更改为 动态库(. dll)后,测试 VisualStudio2012正确发现的地方。

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

如果您的目标是.NET 标准或.NET 核心,那么您需要对 NUnit 测试适配器和 不是分机使用 NuGet 软件包

如果您正在测试,建议从 NuGet 安装适配器。NET 核心或。NET 标准项目。VSIX 适配器不支持也不会支持。NET 核心,因为 VSIX 包不能针对多个平台。

资料来源: NUnit GitHub Wiki

.

此外,你亦可在此查阅常见问题:

我的测试没有出现在 Visual Studio 2017中?

  • 你在使用 NuGet 软件包吗?
  • 您使用的是3.8.0版本还是 NuGet 包的更新版本?
  • 您的测试是针对.NETCore 还是完整的.NETFramework? (见上文)
  • 您是否添加了对 Microsoft.NET.Test.Sdk 的包引用?
  • 你重新启动视觉工作室了吗? 它还是有点喜怒无常。

资料来源: NUnit GitHub Wiki

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

见: https://developercommunity.visualstudio.com/comments/42858/view.html

我很容易就解决了这个问题:

  • 选择您的单元测试项目
  • 单击解决方案资源管理器中的“显示所有文件”按钮,新的临时文件出现在“ obj x86 Debug”中的解决方案资源管理器的文件树中。
  • 删除这些临时文件并重新生成项目。
  • 重新尝试运行测试,并工作。

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

其他建议通常是有效的。 但是由于某些原因,如果 VS 不接受您的更改,并且一直在输出中大声叫嚷,它就不能发现测试,清理这个目录就可以解决这个问题。 而且,是的,它可能只是“某一天”你启动和你的解决方案将不再工作,而“昨天”一切都工作得很好。

我们也有同样的问题。我们有一个大的 VS 2015解决方案,其中包含多个 C # 项目,甚至还有更多的测试项目。

Resharper 的测试发现工作得很好,但 VS Test Explorer 却惨败。

事实证明,这些项目没有相同版本的 MsTest TestFramework 和 TestAdapter,而且有时候他们使用 NuGets,有时候使用好的旧引用,这显然是不受支持的(对于这样一个昂贵的 IDE 来说太多了)。

移除所有 Microsoft.VisualStudio.Test * 引用 然后添加/更新两个 MSTest NuGets 修复了这个问题。

我通过意识到我的测试项目的 目标架构与正在测试的项目不同来解决这个问题。是的,我是通过将目标框架从默认值(Project > Properties > Application)更改为默认值而导致这个问题的,但是对于几周后创建的测试项目而言,我没能做到这一点。不匹配没有导致编译器错误,但是它确实在 错误列表窗口中导致了一个警告。一旦我选择了显示警告的选项,解决方案就显而易见了。

  1. 将 nunit.Framework 更新到最新版本。
  2. 从 nuget 下载单元测试适配器
  3. 重新启动视觉工作室

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

建造 > 清洁

建造 > 建造

我没有在上面的答案中读到这一点,这就是为什么我要加上它:)

我相信您已经找到了问题所在,但在我的例子中,只是帮助安装了 Microsoft.NET.Test。Sdk.确保将其添加到测试项目中。我花了几天时间试图解决这个问题,就这么简单。

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

Https://i.imgur.com/ol6aoom.png

请注意,我已经演练了当前的答案,并没有发现有关加载/卸载测试项目(这个技巧在我的情况下工作,我已经回答了它对另一个类似的问题在这里的 https://stackoverflow.com/a/68101958/966557)。

开始了:

我也面临着同样的问题,因为我卸载了我的测试 然后重新加载; 然后再次运行测试 刷新了测试资源管理器:)

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

注意: 我必须对所有的测试项目都这样做。