ChatGPT解决这个技术问题 Extra ChatGPT

为什么 Visual Studio 2012 找不到我的测试?

我有一些使用内置 Microsoft.VisualStudio.TestTools.UnitTesting 的测试,但无法让它们运行。

我正在使用 Visual Studio 2012 Ultimate。

我有两个项目的解决方案;一个有测试,using Microsoft.VisualStudio.TestTools.UnitTesting[TestClass] 在类之前,[TestMethod] 在测试方法和引用 Microsoft.VisualStudio.QualityTools.UnitTestFramework 之前(版本 10.0.0.0,运行时版本 v2.0.50727)。我已经尝试过 dot-net framework 3.5、4 和 4.5,其他版本给出了重新定位错误。

我试图构建解决方案和项目。测试资源管理器有消息“构建您的解决方案以发现所有可用的测试。单击“全部运行”以构建、发现和运行解决方案中的所有测试。

所以问题是:如何让 Visual Studio 找到测试?

也尝试过这样做:http://msdn.microsoft.com/en-US/library/ms379625%28v=VS.80%29.aspx 但没有成功:当要求右键单击并选择 create tests 时,我陷入了入门部分。没有create tests

我有这个测试(它编译,但没有出现在测试资源管理器中):

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace tests {
    [TestClass]
    public class SimpleTest {
        [TestMethod]
        public void Test() {
            Assert.AreEqual("a","a", "same");
        }
    }
}

我现在发现(请参阅下面已删除的答案)这是因为它位于共享驱动器上,但我还不知道如何解决它。 (可能是关于安全设置的一些东西)。

哪个版本VS 2012?您可以下载像 TestDriven.Net 这样的测试运行程序,或者在 Resharper 中有一个。
我正在使用 Visual Studio 2012 Ultimate。
请分享您添加的框架版本和 UnitTesting 库版本作为参考
在我的情况下,删除 app.config 文件修复了单元测试资源管理器
尝试在输出窗口的“测试”类别下查找错误。我从发布版本创建功能测试,当我尝试使用调试版本(其 dll 位于不同的文件夹结构中)进行调试时,我没有收到任何构建错误,但必须从下拉菜单中查看测试。一旦我解决了这些问题,测试就会开始出现在测试资源管理器中

c
ctrl-alt-delor

我有相同的症状,但在不同的情况下。

我不得不在 Peter Lamberg 的解决方案中添加一个额外的步骤——清理您的解决方案/项目。

我的单元测试项目针对 x64。当我创建项目时,它最初是针对 x86 的。

切换到 x64 后,我所有的单元测试都消失了。

我必须进入测试菜单-> 测试设置-默认处理器架构-> x64。

他们仍然没有出现。

做了一个构建。

还是没有出现。

终于做了一个清洁

然后他们出现了。

我发现清洁解决方案和清洁对于在设置更改时获得解决方案来打球非常有用。有时我不得不走极端,删除 objbin 目录并进行重建。


虽然做清洁有时会有所帮助,但这不是问题。我对网络驱动器上的项目有疑问。构建有帮助的事实只是一个有缺陷的构建工具的症状。
哇! “清洁解决方案”似乎确实有效(而不是全部重建)。我认为这在 Visual Studio 6.0 中不再是一个有用的技巧了!
“清洁”不适用于遇到此问题的同事。从她的 TFS 工作区中删除所有源代码并获取最新(w/覆盖)后,它对她有用。然后效果很好!
这是给我的。在混合了 x86、Any CPU、x64 的解决方案中,没有找到一个特定项目的测试。我清理了解决方案,更改了测试设置的默认架构,然后重新构建,然后一切都可以看到了。这真的没有意义,因为更改架构会发现在不同 CPU 架构下编译的测试。
就在我更改默认处理器时——我的所有测试都显示了。非常感谢!
J
Joseph King

请将关键字 public 添加到您的类定义中。您的测试类目前在其自己的程序集之外不可见。

namespace tests {
    [TestClass]
    public class SimpleTest {
        [TestMethod]
        public void Test() {
            Assert.AreEqual("a","a", "same");
        }
    }
}

为我做的,几乎令人尴尬的是我自己没有发现:)
我也遇到了这个问题,我的问题是由于其他代码的复制粘贴,[TestMethod] 是静态的。
@Seph:我的 [TestMethod] 是静态的,因为这是新测试项目中的 UserTest1.cs 所拥有的!也解决了我的问题。
也不要将 static 放在您的方法前面。我不知道为什么我经常出于习惯这样做。
这为我做到了,有趣的是,你怎么会在本应如此明显的事情上浪费这么多时间。感谢乔金的回答
c
ctrl-alt-delor

这有时有效。

检查测试菜单下的处理器架构是否与您用于构建解决方案的架构相匹配。

测试 -> 测试设置 -> 默认处理器架构 -> x86 / x64

如其他帖子中所述,请确保您打开了测试资源管理器窗口。测试 -> Windows -> 测试资源管理器

然后使用测试重建项目应该使测试出现在测试资源管理器中。

编辑:正如Ourjamie 在下面指出的那样,进行干净的构建也可能会有所帮助。除此之外,我还遇到了一件事情:

对于我在解决方案下创建的新测试项目,在配置管理器中未选中“构建”复选框。

转到构建 -> 配置管理器。确保您的测试项目为所有解决方案配置和解决方案平台选中了构建复选框。


是的,这些可能是它不起作用的其他原因,但请参阅下面的勾选答案,了解为什么它对我不起作用。 (共享文件夹默认是禁用的),如果你能告诉我们如何改变它,我会给你一些积分。
没有像 x64 这样的处理器,但我认为微软将这个术语用于 x86-64/amd64/x86e。也没有 x86,只有 x86 系列。 x 代表未知数,因此 x64 家族的成员将是 164、264、364 ... 或者 x86 是 86 位处理器。
感谢您的回答,它对我有帮助(我从 x86 版本切换到 x64 版本)
即使在 VS 2015 中打开测试资源管理器窗口也可以。很高兴我也可以从命令行运行测试。
d
dnnyz

我有 Visual Studio 2012,但在测试资源管理器中看不到测试,

所以我安装了以下内容:NUnit Test Adapter

这为我解决了这个问题!


也可通过 NuGet Install-Package NUnitTestAdapter 获得
谢谢@DarrenHale。在 NuGet 中搜索这个包时,我还发现了一个名为 NUnit TestAdapter 的包,其中包括 NUnit 2.6.4 框架。
M
MoonKnight

根据我最近的经验,上述所有方法均无效。我的测试方法

public async void ListCaseReplace() { ... }

没有出现,但编译正常。当我删除 async 关键字时,测试显示在测试资源管理器中。这是因为 async void 是一种“即发即弃”的方法。使用方法 async Task,您将得到您的测试!

此外,没有将测试项目的配置设置为“构建”也会阻止测试显示。配置管理器 > 检查您的测试以构建。


我花了很长时间才弄清楚这一点。我将一些方法重构为异步,并将关键字添加到测试中。只有当我用它编写一个新的单元测试时,我才注意到其他测试也丢失了。我发现 this answer 解释了为什么会发生这种情况。
T
Taras Alenin

由于该项目位于共享驱动器上,如原始海报所示。 VS.NET 在加载和运行测试程序集之前需要信任网络位置。 Have a read of this blog post

要允许 VS.NET 加载网络共享的内容,需要将它们(共享)添加到受信任的位置。要将位置添加到完整信任列表运行(显然根据您的环境需要进行修改):

 caspol -m -ag 1.2 -url file:///H:/* FullTrust

要验证或列出现有的受信任位置,请运行:

 caspol -lg

这个答案未经提问者验证,因为我不再对答案感兴趣。如果它适合您(或不适合),请在下面添加评论。
@richard所以您接受了一个您没有验证的答案,并否决了描述针对您的问题的不同原因的解决方案的其他答案? ....这很奇怪!
这对我来说是个问题,但不是解决方案。我把所有东西都搬到了本地,所有的测试都找到了!谢谢!
CasPol.exe 可以在 %windir%\Microsoft.NET\Framework[64]\[version] 下找到。确认您正在为正确的体系结构设置策略。来源:msdn.microsoft.com/en-us/library/cb6t8dtz%28v=vs.100%29.aspx
这也是我的问题。太烦人了,VS 没有把它们捡起来,但对原因给出了零指示!
t
tim

我发现的一个问题是,如果解决方案在网络驱动器/网络位置/共享驱动器上运行,则在测试资源管理器中找不到测试(没有显示)

您可以通过添加环境变量来解决此问题。

COMPLUS_LoadFromRemoteSources 并将其值设置为 1


S
Stephan Bauer

我遇到了同样的问题。在我的情况下,它是由 私有财产 TestContext 引起的。

将其更改为以下有助于:

public TestContext TestContext
{
    get;
    set;
}

在清理和构建解决方案后(如@Ourjamie 的回答中所述),受影响的测试类中的测试方法在测试资源管理器中可用。


好的相同的症状,所以如果你清楚你改变了什么(从什么),那么将删除反对票。
我有完全相同的,我遵循完整的线程,然后来到这个并让我想到将其设置为 public ,宾果游戏:我的新测试出现了。我理解以前的评论,但是......因为这是从谷歌带给我们的......这是当测试没有出现时要阅读的线程。
这是我的问题的原因。我有一个依赖接口的字段作为私有字段。你是救生员!
d
dracocephalum

我在尝试在网络共享上打开解决方案时遇到了同样的问题。在这种情况下,测试资源管理器不会检测到任何单元测试。解决方案原来是:

控制面板 -> Internet 选项 -> “安全”选项卡 -> 单击“Intranet”,将保存网络共享的服务器 IP 地址或主机名添加到“站点”列表。

完成此操作后,我重新编译了解决方案,现在出现了测试。这应该与@BigT 的答案非常相似。


S
SoftwareFactor

用于解决一些常见测试问题的快速检查列表。确保:

测试类和测试方法是公共的 测试类有 [TestClass] 属性 测试方法有 [TestMethod] 属性

如果这没有帮助,请尝试清理、重建解决方案并重新启动 Visual Studio。


这将解决这个问题的大多数访问者的问题,并总结了大部分答案,但它并不涵盖问题中的问题。
谢谢你。 UTA001: TestClass attribute defined on non-public class
C
Community

我收到错误:"Failed to initialize client proxy: could not connect to vstest.discoveryengine.exe."

尝试以管理员身份运行 Visual Studio。这对我有用。

There is another Stack Overflow post discussing this error,同样的解决方案也适用于他们。问题仍然是为什么这有效。


也为我工作!我认为这是一个单独的问题。
嘿,这工作的人。非常感谢您.. 任何解决方法可以使其在不以管理员身份运行的情况下工作?
抱歉,我认为以管理员身份运行不是一个好的解决方案。除非有证据表明这是唯一的方法。
以管理员身份运行通常不是什么大问题。但问题之一是您无法将 Workitem 发送到 Outlook。
编辑了您的答案以链接到相关的 SO 帖子,希望您不介意。不过,我同意斯里拉姆和理查德的观点。尽管这可行,但它是一种解决方法,而不是解决方案。为什么它甚至完全有效似乎还不清楚。
c
ctrl-alt-delor

我有时也会出现同样的症状。

我所做的是: 1. 关闭测试资源管理器窗口 2. 清理解决方案 3. 重建解决方案 4. 从测试 -> Windows -> 测试资源管理器重新启动测试资源管理器窗口。

我在测试资源管理器窗口中进行了测试。


我不认为这是同一个问题。
我认为这是同样的问题,它只是由其他原因引起的。
A
Adil

从顶部的菜单栏...

测试 -> 运行 -> 所有测试

您还可以从测试资源管理器查看所有测试(测试 -> Windows -> 测试资源管理器)

进一步使用 VS 2012,如果您错过任何内容,请尝试使用右上角的快速启动栏(Ctrl + Q)“测试”进行搜索

希望这可以帮助。


我试过了,两者都与 nunit 一起工作。但是这次我试图运行其他人使用 Microsoft.VisualStudio.TestTools.UnitTesting 编写的测试,知道我做错了什么吗?
没有任何区别......有时它碰巧没有发现单元测试......所以如果你打开测试资源管理器并构建解决方案,它会在一段时间内启动单元测试......可能你已经知道了。 ..
我只是想确保您使用的是快速版本或不包含测试工具的版本。您是否尝试过安装第三方测试运行器?
T
Todd Carter

我发现解决此问题的最佳方法是创建一个 .proj msbuild 文件并将您遇到问题的单元测试项目添加到此文件中,并使用 mstest 的命令行版本执行测试。我在我的 app.config 中发现了一个小配置问题,该问题仅在从 mstest 运行测试时出现 - 否则测试项目构建得很好。此外,您还会发现此方法的任何间接参考问题。一旦你可以使用 mstest 从命令行运行单元测试,你就可以做一个干净的解决方案,重建解决方案,你的测试应该被正确地发现。


就我而言,app.config 也扼杀了单元测试的外观。在删除 app.config 并重建测试项目后,他们终于回来了!
N
Nestor

就我而言,这是另一回事。我已经安装了一个软件包,然后将其卸载并重新安装了早期版本。这在我的 app.config 中留下了一个残留的 configuration/runtime/asssemblyBinding/dependencyIdentity 重定向。我不得不纠正它。我通过查看 Output 窗口并在下拉菜单中选择“Tests”找到了答案。错误消息在那里。这很痛苦......我希望它可以帮助别人。


J
Jake_Howard

这更多的是帮助最终来到这里的人,而不是回答 OP 的问题:

尝试关闭并重新打开视觉工作室,对我有用。

希望这可以帮助某人。


m
mortey

我知道这是一个较老的问题,但在 Visual Studio 2015 中,我遇到了新创建的测试类无法识别的问题。什么都试过了。最终的问题是该课程没有“包含在项目中”。我只是在重新启动 Visual Studio 并注意到我的测试类不存在时才发现这一点。在显示隐藏文件时,我看到它以及我编写的其他类都没有包括在内。希望有帮助


S
Shiran Jayawardena

当我尝试在另一台 PC 中构建解决方案时,我多次遇到此问题。

我也在使用 NUnit 和 Specflow。默认情况下,我的测试项目以 X86 为目标,但我必须将其更改为 X64。步骤是 1. 测试菜单 -> 测试设置 - 默认处理器架构 -> x64。 2. Clean Build 3. Build 4. 如果仍然没有出现测试。 5. 转到工具  扩展和更新,然后安装 NUnit 和 Specflow 库 6. 清理构建 7. 构建

然后通常测试会出现在测试编辑器中。


@srebella 很高兴您解决了这个问题。我花了几天时间来解决这个问题。请与社区分享您的经验。如果您认为它有效,请将此答案放在首位。谢谢 :-)
s
sam

我已将 VS 2012 更新为最新更新。即视觉工作室更新3。这解决了我的问题。


Z
Zack Weiner

对我来说,解决方案稍微简单一点。

我刚刚在我的机器上引入了一个现有的解决方案(从 gitHub 克隆),我们不跟踪 Visual Studio 创建的自动生成的 .cs 文件。 (对于每个功能文件,都有一个同名的 .cs 文件)

在没有关联 .cs 文件的情况下打开解决方案实际上允许我导航到绑定的方法,因此看起来好像 specflow 已正确连接,但我无法在测试资源管理器中查看测试名称。

对于这个问题,只需从项目中排除功能文件,然后重新包含它们,强制 VS 重新生成这些自动生成的代码隐藏文件。

之后,我能够在测试资源管理器中查看测试。


l
ladygargar

在将我的解决方案从 Microsoft Visual Studio 2012 Express for Web 升级到 Microsoft Visual Studio 2013 时,我遇到了这个问题。

我在 2012 年创建了一个单元测试项目,在 2013 年打开后,单元测试项目不会在测试资源管理器中显示任何测试。每次我尝试运行或调试测试它都失败了,在输出窗口中说以下内容:

    Failed to initialize client proxy: 
    could not connect to vstest.discoveryengine.x86.exe

我还注意到,在调试测试时,它正在启动 Visual Studio 2012 的实例。这让我了解到单元测试项目仍在引用 2012 的事实。查看测试项目参考,我意识到它针对的是错误的 Microsoft Visual此版本 Visual Studio 的 Studio 单元测试框架 DLL:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

我将版本号从 11.0 更改为 12.0:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

我重建了所有,这解决了这个问题 - 所有测试都在测试资源管理器中找到,现在所有测试都找到并完美运行。


J
Jan Dolejsi

检查您的测试项目是否未在项目属性 -> 签名中设置为仅延迟签名。如果是,请取消选择它并进行干净的重建。


或者只是在 VS 开发人员命令提示符下由 sn -Vr *,<public key token> 作为管理员跳过本地计算机上的签名检查
h
huddy72

我在尝试在 VS2013 Ultimate 的网络共享上打开解决方案时遇到了同样的问题。

我通过打开解决了问题

控制面板 -> Internet 选项 -> “安全”选项卡 -> 单击“本地 Intranet”,单击站点并确保勾选“自动检测 Intranet 网络”。


M
Mike Perrenoud

这些都是很好的答案,但我知道还有一个原因;我刚碰到它。在我的一项测试中,我收到一条 ReSharper 消息,表明我有一个未使用的私人课程。这是我将在即将到来的测试中使用的课程。这实际上导致我所有的测试都消失了。


J
Joshua Starner

检查引用的程序集是否有任何可能将“复制本地”设置为“假”的程序集。

如果您的测试项目构建到它自己的文件夹(例如 bin/Debug)并且该项目依赖于另一个程序集,并且“引用”列表中的这些程序集之一被标记为 Copy Local = "False",则由于缺少依赖项和构建后您的测试将不会加载。


u
user2831855

看起来 NUnit Framework 2.6.4 不适用于 NUnit 测试适配器。在网站中,它提到测试适配器仅适用于 NUnit Framework 2.6.3。

这是我的问题: 1.我在VS2012中通过Nuget分别下载了NUnit和NUnit Test Adapter。不知何故,NUnit 更新到 2.6.4 突然我没有看到我的测试用例列出来。

使固定:

卸载 Nuget 和 Nuget 测试适配器转到工具 > Nuget > Nuget Pkg 管理器 > 管理解决方案 b 的 Nuget Pkg。列出已安装的软件包 c.点击管理 d.取消选中您的项目安装 NUnit 测试适配器,包括 NUnit 2.6.3 框架清理/重建解决方案打开测试 > 测试资源管理器 > 全部运行

我看到了所有的测试用例

希望这可以帮助


c
ctrl-alt-delor

这里的解决方案都没有帮助我。一个解决方案不会发现测试,而引用相同项目的另一个解决方案工作正常。我终于通过删除 solutionname.v12.suo 文件解决了这个问题。


m
mshsayem

我有同样的问题,但有点不同。

我使用的是 Visual Studio 2012。出于某种原因,只有初始生成文件的测试正在运行。但是另一个文件中的测试没有运行。尝试了此处发布的不同解决方案,但没有奏效。

最后我发现我在测试类中有一个私有方法,这是类中的第一个方法。我只是将私有方法 移到了一个测试方法之后;所以现在,具有 [TestMethod] 属性的方法是类中的 first 方法。奇怪,但现在可以了。

希望有一天这对某人有所帮助。


Z
Zonus

测试不喜欢异步方法。例如:

    [TestMethod]
    public async void TestMethod1()
    {
        TestLib oLib = new TestLib();
        var bTest = await oLib.Authenticate();

    }

这样做之后:

    [TestMethod]
    public void TestAuth()
    {
        TestMethod1();
    }

    public async void TestMethod1()
    {
        TestLib oLib = new TestLib();
        var bTest = await oLib.Authenticate();

    }

它看到了测试。


更好的答案是[Test] public void XamarinExampleTest() { // This workaround is necessary on Xamarin, // which doesn't support async unit test methods. Task.Run(async () => { // Actual test code here. }).GetAwaiter().GetResult(); }
“测试不喜欢异步方法”是错误的。 “测试不喜欢异步 void 方法”是真的,解决方法就是将测试方法声明为异步任务。
s
simonlchilds

添加我的答案,因为这是 Google 上的最佳结果。

我正在使用 Visual Studio 2015 并且(不知不觉 - 我刚刚运行 Install-Package NUnit)将 NUnit3 包 NuGet 安装到我的测试项目中。我已经安装了 NUnit 测试适配器扩展,但我的测试仍然没有出现。

通过 Tools > Extensions and Updates 安装 NUnit3 测试适配器为我解决了这个问题。