222

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

我正在使用 Visual Studio 2012 Ultimate。

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

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

所以问题是:如何让 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");
        }
    }
}

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

4

49 回答 49

227

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

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

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

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

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

他们仍然没有出现。

做了一个构建。

还是没有出现。

终于做了一个清洁

然后他们出现了。

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

于 2013-04-20T05:10:13.920 回答
160

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

namespace tests {
    [TestClass]
    public class SimpleTest {
        [TestMethod]
        public void Test() {
            Assert.AreEqual("a","a", "same");
        }
    }
}
于 2013-01-23T20:59:21.383 回答
58

这有时有效。

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

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

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

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

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

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

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

于 2013-03-20T15:56:42.353 回答
32

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

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

这为我解决了这个问题!

于 2014-04-23T12:21:42.277 回答
18

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

public async void ListCaseReplace() { ... }

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

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

于 2014-01-29T11:37:29.327 回答
12

由于该项目位于共享驱动器上,如原始海报所示。VS.NET 在加载和运行测试程序集之前需要信任网络位置。阅读这篇博文

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

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

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

 caspol -lg
于 2013-08-08T04:42:47.150 回答
10

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

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

COMPLUS_LoadFromRemoteSources 并将其值设置为 1

于 2013-08-02T23:01:52.037 回答
6

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

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

还有另一个 Stack Overflow 帖子讨论了这个错误,同样的解决方案也适用于他们。问题仍然是为什么这有效。

于 2013-04-19T04:20:40.580 回答
6

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

将其更改为以下有助于:

public TestContext TestContext
{
    get;
    set;
}

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

于 2013-06-19T08:43:06.207 回答
6

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

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

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

于 2013-09-24T01:04:14.183 回答
6

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

  1. 测试类和测试方法是public
  2. 测试类有[TestClass]属性
  3. 测试方法有[TestMethod]属性

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

于 2014-03-18T10:16:51.177 回答
4

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

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

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

于 2013-08-01T08:37:17.687 回答
2

从顶部的菜单栏...

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

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

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

希望这可以帮助。

于 2012-11-23T17:31:50.193 回答
2

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

于 2013-04-24T15:48:36.357 回答
2

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

于 2014-03-26T15:49:06.817 回答
2

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

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

希望这可以帮助某人。

于 2014-10-07T15:39:39.980 回答
2

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

于 2015-08-31T19:34:36.743 回答
2

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

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

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

于 2015-12-09T11:01:30.223 回答
1

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

于 2013-09-17T15:15:02.270 回答
1

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

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

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

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

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

于 2013-12-26T17:10:44.367 回答
1

在将我的解决方案从 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

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

于 2014-01-18T22:33:52.790 回答
1

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

于 2014-01-22T10:12:35.047 回答
1

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

我通过打开解决了问题

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

于 2014-01-22T11:04:25.597 回答
1

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

于 2014-03-20T18:13:16.680 回答
1

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

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

于 2014-06-03T19:09:12.973 回答
1

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

于 2014-09-05T22:42:13.127 回答
1

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

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

使固定:

  1. 卸载 Nuget 和 Nuget 测试适配器

    一种。转到工具> Nuget > Nuget Pkg 管理器> 管理 Nuget Pkg 以获取解决方案

    湾。列出已安装的软件包

    C。点击管理

    d。取消选中您的项目

  2. 安装 NUnit 测试适配器,包括 NUnit 2.6.3 框架

  3. 清洁/重建解决方案

  4. 打开测试 > 测试资源管理器 > 全部运行

我看到了所有的测试用例

希望这可以帮助

于 2014-12-17T23:57:56.023 回答
1

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

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

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

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

于 2015-10-15T04:36:32.160 回答
1

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

    [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();

    }

它看到了测试。

于 2015-12-11T22:39:39.810 回答
1

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

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

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

于 2016-01-13T21:11:28.027 回答
0

我尝试了以上所有方法,但我的 Visual Studio 2012 仍然没有显示测试。最后,我去了一个测试类,发现它有一个 RootNamespace.FolderName,我删除了 .FolderName 以将该类放在根命名空间中,然后所有测试都回来了!

直到前几天才明白为什么它可以在原始命名空间中正常工作。

于 2013-10-01T16:07:51.670 回答
0

我复制粘贴了方法声明,其中包括一个输入字符串参数。忘记删除输入参数。

  public void ExtractValueFromLineTest(string input) {}//test not discovered because of the string input param
于 2014-02-12T08:10:11.237 回答
0

这个只是咬了我一口。我在我的项目中添加了一个测试,但无法让它显示在测试资源管理器中。我的旧测试都出现了。最后,我意识到我只是在查看一个特定的播放列表,并没有将新测试添加到播放列表中。如果您正在使用播放列表,请选择“所有测试”并查看 VS 是否找到您的测试并在测试资源管理器中显示它们。然后,您也可以将它们添加到所需的播放列表中。

于 2014-05-22T20:53:26.780 回答
0

Visual Studio Professional 2012,此处更新 4。在与测试类相同的项目中具有互操作函数定义(DllImport/extern)会使测试资源管理器感到困惑。将 Interop 移到一个单独的项目中,解决了这个问题。

于 2014-06-27T15:14:48.290 回答
0

我在 VS2013 Ultimate 中遇到了同样的问题。我的问题是我正在创建 Windows 服务并忘记卸载它。所以服务正在运行,VS 无法访问导致整个测试套件根本没有加载的 DLL 之一。

于 2014-08-04T11:17:29.453 回答
0

这是根据用户错误/愚蠢添加到列表中的另一个....我尝试了这个问题的各种答案,然后意识到我的测试项目在配置管理器(构建菜单,配置管理器)中没有被选中,所以它不是建成 >.<

发布此消息是希望它可以节省像我刚才那样浪费一两个小时的人!

于 2014-10-06T13:49:44.590 回答
0

我在 Windows 7 SP1 x64 上的 Visual Studio 2013 Update 4 中使用针对“任何 CPU”平台配置的测试项目遇到了同样的问题。

问题是测试项目实际上被命名为“测试”,并且会在项目第二次(重新)构建时消失。

例如,在我将项目重命名为“MyProject.Tests”后,测试不再消失。

于 2015-03-03T02:58:16.043 回答
0

我反复遇到的一个问题是没有在 Windows 8+ 上以管理员身份(明确)运行 Visual Studio。我尝试了列出的几个建议,但在我以管理员身份运行 VS 2013 之前,它们并没有显示单元测试(即使我的快捷方式设置为以这种方式打开 VS,要么打开解决方案文件,要么有时单击它没有的快捷方式'实际上并没有以管理员身份打开)。

于 2015-03-16T23:02:01.533 回答
0

由于这些答案都没有解决我遇到的原因,因此对于这个问题,我也会在这里添加我的答案。

就我而言,这是一个复制粘贴代码问题。我们有一个TestProjectA特定类型的测试,我们想将其提取到它自己的测试项目中 - TestProjectB. 现在的问题是,虽然测试TestProjectA继续显示得很好,但新的测试TestProjectB没有显示在 VS 测试资源管理器中 - 除非您专门构建TestProjectB或手动右键单击那里的测试并运行它。

原因是在复制粘贴代码时,一些命名空间没有得到更新:

  • 名称空间中有一个带有文件路径的TestMethodA()inTestClassATestProjectA.ModuleA\TestProjectA\TestClassA.cs
  • 以及带有文件路径的命名空间中的TestMethodA()inTestClassBTestProjectA.ModuleA\TestProjectB\TestClassB.cs

因此,Visual Studio 在输出窗口中打印出一条消息,表明这两个的 TestId 相同,并且由于两个项目之间的 TestId 冲突,因此继续显示TestProjectA而不是在测试资源管理器中。TestProjectB更正命名空间以TestProjectB.ModuleB解决\TestProjectB\TestClassB.cs问题。

于 2015-03-19T18:34:04.247 回答
0

这个问题好像有这么多不同的解决方案不妨加上我自己的:

关闭 Visual Studio

将 C:\Users\username\AppData\Local\Microsoft\VisualStudio\12.0\ComponentModelCache 重命名为 ComponentModelCache.old

运行 Visual Studio,组件缓存将被重建。

于 2015-05-12T08:18:43.120 回答
0

另一个可能阻止发现测试的问题,通常在“测试”输出窗口中显示一条消息,例如:

无法配置运行设置插件“VSTest 运行配置”的设置,因为它引发了以下异常:
'解析 EntityName 时发生错误。第 1 行,第 8 位。
请联系插件作者。

这可能是由于路径或文件名中包含需要转义才能解析为 xml 的字符引起的。特别是&字符,因为目录或文件名中不允许使用<> 。这会导致测试发现失败并且无法识别测试,但我仍然可以通过单击边距使用 Resharper 手动运行测试。

于 2015-09-03T10:09:25.093 回答
0

在谷歌搜索“visual studio 看不到测试”之后,它把我带到了这里,所以我想我会分享我的问题。我可以构建我的解决方案,并且测试存在,但我看不到它们!原来我们这是 IDE 的一个怪癖,导致了这个问题。有关解释和修复,请参见下图:

在此处输入图像描述

于 2015-10-22T21:41:17.890 回答
0

您可以做的最简单的事情是,只需将这些文件从文件资源管理器拖放到测试项目。再次构建项目,一切顺利!

或者

在文本编辑器中打开.csproj测试项目的文件并手动包含要编译的文件名。在文件中搜索Compile标签并添加您要运行的文件。

<ItemGroup>
    <Compile Include="TestSettings.cs" />
    <Compile Include="TestLibrary.cs" />
    <Compile Include="UnitTest1.cs" />
</ItemGroup>

为您的文件添加编译标签并保存。现在运行测试。您的带有单元测试的文件将被检测并运行。

于 2015-12-22T06:17:42.633 回答
0

问题是测试运行器被配置为不从远程驱动器运行测试。当我将项目复制到本地驱动器时,它运行良好,但我需要它在共享驱动器上(不记得为什么)。

我读到它可以配置为在共享驱动器上工作,但是当我发现我在 Debian 上切换到 MonoDevelop 的解决方案时,我从来没有这样做过。

于 2015-12-22T23:13:43.300 回答
0

我阅读了所有现有的答案,发现我的(xUnit)测试没有被发现,因为我删除了“未使用”的引用,更具体地说,xunit.execution.desktop. 重新安装 xUnit 包解决了我的问题。

于 2016-05-26T03:15:36.460 回答
0

Visual Studio 2015 (v.14 .....) - 这里有同样的问题

原因:不同版本的 NUnit 和 NUnit 测试适配器在我的情况下,我拥有 NUnit (3.5) 和 NUnit 测试适配器的最新版本,但测试适配器不是正确的。对于 NUnit 3 及更高版本,必须使用 NUnit3TestAdapter

解决方案:卸载“有故障”的 NUnint 测试适配器并安装 UNIt3TestAdapter v.3.5.0(现在最新的是 3.6.0 但没有使用它以保持与 NUnit 相同)

在弹出解决方案测试的重建后:)

于 2016-12-09T07:54:03.553 回答
0

就我而言,我有 3 个使用 Visual Studio 2017 创建的测试项目(但我认为没关系),其中只有两个是由测试资源管理器发现的。我意识到第三个项目有不同版本的Microsoft.VisualStudio.QualityTools.UnitTestFrameworkdll。我在 NuGet 管理器中更新了它并出现了测试。

于 2017-04-26T18:23:49.900 回答
0

我们使用的是 xunit,解决方案对我有用,团队正在删除文件夹 %TEMP%\VisualStudioTestExplorerExtensions

阅读此线程。

为什么 Visual Studio 2015/2017 Test Runner 没有发现我的 xUnit v2 测试

于 2018-04-23T12:02:05.533 回答
-1

您可以右键单击测试方法并选择运行测试/运行单元测试选项。那应该会打开测试窗口。

于 2012-11-23T17:47:24.740 回答