ChatGPT解决这个技术问题 Extra ChatGPT

Visual Studio 2013 未发现单元测试

我在 Visual Studio 2013 中有一个简单的解决方案,它由一个 Web 项目、一个库项目和一个单元测试项目组成。当我打开解决方案并尝试运行单元测试时,Visual Studio 不会发现它们。要运行测试,我尝试转到菜单并选择测试 -> 运行 -> 运行所有测试或打开测试资源管理器窗口。通过这些方法,Visual Studio 没有在解决方案中发现任何测试。

首先创建一个简单的单元测试项目并尝试运行测试,Visual Studio 知道发现测试并且我可以运行它。然后,如果我打开我以前的解决方案,Visual Studio 现在会发现所有测试。我尝试保存我的解决方案,但关闭它并重新打开,而不先创建单元测试项目,Visual Studio 不会再次找到测试。这是一种非常奇怪的行为,我不知道为什么会这样。

我曾经在这个项目中单独工作,该项目使用与 Visual Studio 团队基础集成的源代码控制 git。当一个新元素进入项目并且我需要通过在线源代码管理重新创建解决方案时,Visual Studio 的问题没有发现单元测试开始。在此之前,所有的测试都是由visual studio发现的。

为了创建单元测试,我使用了 dll Microsoft.VisualStudio.QualityTools.UnitTestFramework。我的 Visual Studio 版本是:Microsoft Visual Studio Express 2013 for Web Version 12.0.30723.00 Update 3。我的 .net 框架版本是 4.5.50938。

我所有的测试都是这样的:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}
这些是基于异步的单元测试吗?
不知道问题是什么,但以管理员身份运行为我解决了这个问题。
所有基于同步的单元测试
您是否尝试过外部测试运行程序(如 ReSharpers 或 NCrunch)?也许你的安装有问题(所以重新安装 VS)
这些都没有为我解决这个问题:(真是一场灾难。我已经放弃了 NUnit 并依赖于 UnitTestFramework - 奇怪的是与 OP 相反的问题

A
AndyG

我注意到我必须不时做一些事情才能让测试正确显示。

如果您的解决方案位于需要管理员访问权限才能读/写的受保护驱动器中,则有时只会出现部分测试。在这种情况下,绝对以管理员身份运行 VS。如果您的解决方案是 64 位,请确保测试 > 测试设置 > 默认处理器架构设置为 x64。有时它会设置为 x86。将其设置为 x64,然后重建。有时只需重新启动 Visual Studio 就可以解决问题,因为测试资源管理器将再次启动。不要忘记实际构建测试项目/解决方案。 (如果您希望它与其余项目一起构建,请右键单击您的解决方案 > 属性 > 配置属性 > 配置 > 选中您的测试项目的“构建”框)确保测试位于您的公共部分测试班


我意识到这个答案有点晚了,但是我的谷歌搜索把我带到了这里,没有提到解决我的问题。最终我发现它在我的列表中排名第二,所以我想留下这些知识,以及我随着时间的推移学到的其他技巧。
#2和#3的组合为我做了。 Visual Studio 抱怨我的解决方案中的一些(非测试)项目被排除在测试发现步骤之外,因为它们是为 x86 构建的,但这很好。
我发现我的设置都是正确的并且重新启动不起作用。为我解决问题的只是构建解决方案。我知道这可能看起来很愚蠢,但这并不明显是必要的;我还没有看到任何官方文档提到这一步。
我在VS2015中遇到了同样的问题。 #2为我解决了这个问题。
我不知道为什么人们会为一个经常失败的产品花这么多钱。在它发现我的测试之前,我必须将我的项目升级到 2015 年并执行 #3 2 次。
p
p.s.w.g

如果您使用 NUnit,请务必先下载 NUnit Adapter。

转到工具 → 扩展和更新... → 在线 → 搜索“NUnit 测试适配器”。


我正在使用 Microsoft 的 UnitTests。在这种情况下,我认为没有必要安装任何东西。
这为我做到了——非常感谢。
那为我修好了。谢谢。
赞成解决问题,但是否有必要使用 NUnit 适配器,或者 Visual Stdio 是否应该与 NUnit 一起工作。
你是神先生。
N
Noctis

确保您的测试类是 public,以便可以找到它。如果您要引用另一个类,请确保相同。

此外,有时如果您没有断言或者您没有使用 [TestMethod] 装饰测试,则可能无法识别测试。

还有 2 件事:1) 异步单元测试充其量是有趣的,最坏的情况是根本没有。看看 Stephen Clearythis article,如果您感兴趣的话,请远离那里。

2) 如果您使用 NUnit 并遇到同样的问题,请记住它是用于 Nunit 的 [TestCase],而不是 [TestMethod]

如上所述,这是我在代码项目上发布的 article,其中包含 MSTestNUnit,如果您想试一试并确保您没有遗漏任何内容。


我所有的测试都是这样的: [TestClass] public class ServicesUtilsTest { [TestMethod] public void Test1() { Assert.IsTrue(True); } }
这不是很清楚。把它放在你问题的代码块中,这样就可以理解了:)
我所有的测试都是针对同步代码的,我认为我的问题不在于单元测试代码,而更多的是在 Visual Studio 中,有时没有发现测试。
尝试改用这个:using Microsoft.VisualStudio.TestTools.UnitTesting;
我已经在使用 Microsoft.VisualStudio.TestTools.UnitTesting。此命名空间在 dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 中定义
F
Frank

我遇到了同样的问题,但其他解决方案都没有奏效。原来我使用的是带有 2 适配器的 NUnit 3 框架。

如果您使用的是 NUnit 3,请转到扩展和更新并安装 NUnit3 测试适配器。


它确实在 Nuget 包的描述中说明了这一点。但如果你像我一样不读,我希望这会有所帮助:“这个包包括 NUnit 3.0 框架程序集,你的测试引用了它。你需要安装 3.0 版的 nunit-控制台程序或支持 NUnit 3.0 的第三方运行程序以执行测试。用于 NUnit 2.x 的运行程序将无法正确运行 3.0 测试。
就我而言,我知道这与 NUnit3 更新有关,但是我的一组测试通过了,而其他的则没有看到。仔细检查后,输出中有很多异常,即使测试都通过了。
我也是这种情况。我已经运行了 nuget “update-package”,却没有意识到它已从 NUnit 2.x 更新到 3.x。
目前无法通过 NuGet 找到 NUnit 3.0 测试适配器(请参阅 NUnit 3.0 Wiki)。它仍然可以作为扩展安装。
非常感谢弗兰克。它解决了我的问题。现在我可以在控制台窗口中看到单元测试结果 :)
a
abatishchev

我时不时遇到这个问题。对我有用的是关闭 Visual Studio 并转到文件夹:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

并删除它的内容。

一旦你打开 Visual Studio 并再次加载你的项目,测试资源管理器应该包含你的测试


对我来说这行不通。我最近正在使用 Visual Studio 2013 Express 和更新 5 安装。仍然没有出现单元测试。
这也是我的工人。甚至在没有重新启动视觉工作室的情况下工作。几个小时的下水道终于结束了。
该目录在 VS2017 中不再存在。
谢谢它对我有用,这个文件夹可以有不同的版本,具体取决于 Visual Studio 的安装,对我来说它是 %LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
S
SushiGuy

XUnit 用户可能会注意到测试资源管理器窗口不再列出任何测试。要使测试再次被发现,请尝试 this important tip,在下面突出显示。

如果您在发现或运行测试时遇到问题,您可能是 Visual Studio 中损坏的运行程序缓存的受害者。要清除此缓存,请关闭 Visual Studio 的所有实例,然后删除文件夹 %TEMP%\VisualStudioTestExplorerExtensions。还要确保您的项目仅链接到单个版本的 Visual Studio 运行程序 NuGet 包 (xunit.runner.visualstudio)。

https://i.stack.imgur.com/a0EJD.png


这对我不起作用。测试资源管理器只是没有找到我的测试,据我所知,我没有做错,我在这里尝试了一些解决方案但没有成功。
使用 MsTestV2 - 这是解决问题的唯一方法
A
AdamB

对于未来的谷歌人,我遇到了一个罕见的情况导致了这种情况。

在我的基础测试类中,我有一个名为 TestContext 的属性。这干扰了 MSTest 保留的 TestContext 属性,导致我的所有测试都对 VS/Resharper 隐藏,除了一个(不是从基础继承的)。


也得到了我!我忘记设置测试上下文属性 public
z
zook2005

https://i.stack.imgur.com/ZCtFs.gif


a
alansiqueira27

我的问题是因为我的单元测试方法不是无效的,它正在接收参数。


在所有的事情中......这是我的问题,参数位是有道理的。毕竟,测试系统知道要通过什么?解决方案是创建一个测试方法,您可以在其中手动调用要测试的方法。如果您正在测试一个 WebAPI 项目并且有一个带参数的 Get,您仍然必须有匹配的 Get 调用,但它不会显示在资源管理器中。
c
cookiemonster

我发现 VS 测试资源管理器没有发现标记为 async void 的单元测试方法。这似乎是因为 VS 没有任何方法可以等待测试完成并决定它是否成功。如果您绝对需要一个异步运行的测试方法,那么让它返回一个任务,而不是像 async Task。我发现这为我解决了这个问题。


这不能回答上面的问题,但这正是我试图解决的问题。所以你出了事故+1 :) 非常感谢!
A
Alfons

尝试将所有项目构建为 MSIL(任何 CPU)而不是 x86/x64。奇怪地为我工作


我只需要使用 Any CPU 构建测试项目,其他项目仍然是 x64
从技术上讲,C#/VB.NET 总是编译为 MSIL。项目设置“x86”、“x64”或“任何 CPU”(在较新的版本中,“首选 32 位”)只是 EXE/DLL 顶部的标志。不过,Point 仍然存在; NUnit 不会列出它无法加载到执行引擎中的测试,因为它们被标记为需要特定架构才能运行。
C
Community

虽然 AndyG 的解决方案有效,但更持久的解决方案可能是将 PreferredToolArchitecture 环境变量设置为“x64”,方法是:

How to make Visual Studio use the native amd64 toolchain

或通过:

控制面板 |系统与安全 |系统 |高级系统设置|环境变量

首选工具架构 = x64

DefaultToolArchitecture = Native64Bit

PROCESSOR_ARCHITECTURE = x64

处理器架构 = x64


J
Jeferson

我遇到了同样的问题,我再次记得(这种情况以前发生过),在解决方案平台菜单上选择“混合平台”以及其他答案都是有效的。


但是解决方案平台菜单在哪里?是在 Visual Studio 中吗?我正在使用 Visual Studio Express 2013 for Web,但找不到该菜单。
A
Arthur Russell Fox

我设法将我的添加为

public static void TestMethod1(){}

删除静电后开始工作....


D
Debendra Dash

https://i.stack.imgur.com/JFXRB.jpg


u
user5224229

转到项目菜单 > 配置管理器检查您的测试项目平台是否与项目的其余部分匹配,并检查构建然后重建。


我的项目菜单中没有任何配置管理器选项。我只能找到项目属性选项。我非常喜欢单元测试项目的平台,其他项目也一样。所以,对我来说,这个解决方案不起作用。
定义“匹配项目的其余部分”
K
Kevin Giszewski

刚遇到这个,我没有看到与我相似的类似案例。

在我的测试项目的 .csproj 文件中,NUnit 参考隐私设置为 False

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

在我将 <Private> 设置为 True 后,它起作用了。


C
Community

你只需要安装这个包:

https://i.stack.imgur.com/rZv2n.png


我知道使用另一个单元测试框架可以解决我的问题。但是,如果我想继续使用不是解决方案的 Microsoft 单元测试框架。
M
Mikal Madsen

为了让测试显示在测试资源管理器窗口中,我必须安装包管理器中不可用的 NUnit3 测试适配器 3.0。

https://visualstudiogallery.msdn.microsoft.com/0da0f6bd-9bb6-4ae3-87a8-537788622f2d 下载


我正在使用 Microsoft 的 UnitTests。在这种情况下,我认为没有必要安装任何东西。
F
Francis Smith

我有同样的问题。

这是由于我添加到我的项目(3.2.0)和我安装的测试适配器(2.0.0)中的 NUnit 版本不兼容。

要修复,请使用“工具 > 扩展和更新”并搜索 NUnit3 测试适配器,之后它发现了我的测试。

干杯


我没有使用 NUnit。
D
Dominic Hartjes

我们只是为了争论,您需要在您的测试项目中使用 X64 架构,以便正确构建依赖项(如我的情况)。您可能需要在“测试--测试设置”菜单下修改默认处理器架构。将此设置为 X64 允许我的测试资源管理器使用 Microsoft.VisualStudio.TestTools.UnitTesting 找到我的测试。


M
Martijn Evens

很抱歉添加到长列表中,但我遇到了一个完全不同的问题。首先,我想提一下我在测试资源管理器中单击“全部运行”然后在 Visual Studio 中查看构建输出窗口时发现了我的问题。您必须积极观看它,因为之后消息会消失。

至于这个问题,看起来在扫描测试期间,DLL 被加载并枚举了它的测试类型。这会导致引用被加载,如果在此过程中发生任何故障,测试将不会显示在资源管理器中。我有两个问题阻止了测试 DLL 被成功加载:

配置文件中仍然存在绑定重定向(重定向到比测试项目中引用的版本更低的 NIBerate 版本)。

冲突的程序集引用(无法加载第二级引用)。 AsmSpy 是寻找这些的好工具。


我遇到了同样的问题,很难找到哪些 dll 没有加载....
T
Ton Snoei

如果您从网络共享或共享的“我的文档”目录加载 Visual Studio(在我的情况下为 VS 2015 社区)解决方案,您将遇到此麻烦。我通过将解决方案及其基础项目移动到本地文件夹来解决它。


c
curiousBoy

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

https://i.stack.imgur.com/pxwxF.jpg

https://i.stack.imgur.com/lzFQx.jpg


k
kfn

我遇到了同样的问题。查了一下,发现这个dll没有建好,放到正确的文件夹下。我一更改配置,它们就出现了。 - 项目构建选项,应该使用什么文件夹? - 构建菜单条目构建配置,它们应该被检查。

为我修好了。


对我来说,用于测试的 dll 也没有构建,因为 Visual Studio 没有找到任何已定义的测试。我正在使用 Visual Studio Express,但没有 Build 菜单项。但是在我的配置管理器中,我检查了所有构建选项。所以,我认为这对我来说不是问题。
@miguelbgouveia,恰恰相反-VS构建DLL,然后扫描它们以进行测试。因此,如果您没有测试项目 DLL,您肯定找不到任何测试。
M
MartijnK

对于 Visual Studio 2013.5,清除解决方案中的 \TestResults 目录会有所帮助。 Visual Studio 损坏了存储已发现测试的 mdf 文件,从而阻止了单元测试的发现。


它在您的项目的解决方案中。在解决方案资源管理器中右键单击您的项目文件 -> 在文件资源管理器中打开文件夹。从那里转到一个目录并删除 /TestResults 目录。您可能必须关闭 Visual Studio 才能删除所有内容。下次打开项目时,它将重建目录。
R
Roni

确保您的所有项目都使用相同的配置运行。在您项目的属性 => 调试 => 平台下拉列表中,选择您在其他项目中确定的适当平台(对我来说是“任何 CPU”)。


a
amalgamate

我知道如果未构建解决方案,则找不到单元测试,因此可以尝试(构建解决方案),但该解决方案就像帮助台询问您的计算机是否已插入...

在干净的重建并没有为我解决问题之后,运行完整的批处理构建确实解决了它。


H
HeatherD

有同样的问题;测试突然停止被发现。

Nunit 测试适配器不知何故被禁用。在扩展管理器中单击启用为我修复了它。


f
forforf

我遇到了同样的问题,直到我意识到我犯了一个剪切/粘贴错误并在测试前离开了 [Test Method]


这已经发生在我身上了。但在这种情况下,他们并非如此。