[英]Why does visual studio 2012 not find my tests?
我有一些使用内置Microsoft.VisualStudio.TestTools.UnitTesting
测试,但无法让它们运行。
我正在使用 Visual Studio 2012 Ultimate。
我有两个项目的解决方案; 一个有测试, using Microsoft.VisualStudio.TestTools.UnitTesting
,在类之前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");
}
}
}
我现在发现(请参阅下面已删除的答案)这是因为它位于共享驱动器上,但我还不知道如何解决它。 (可能与安全设置有关)。
我有相同的症状,但在不同的情况下。
我不得不为Peter Lamberg的解决方案添加一个额外的步骤 - 清理您的解决方案/项目。
我的unittest项目针对x64。 当我创建项目时,它最初的目标是x86。
切换到x64后,我的所有单元测试都消失了。
我不得不去测试菜单 - >测试设置 - 默认处理器架构 - > x64。
他们仍然没有露面。
做了一个。
仍然没有出现。
最后做了一个清洁
然后他们出现了。
我发现清洁解决方案和清洁在设置更改时获得解决方案非常有用。 有时我必须走极端并删除obj
和bin
目录并进行重建。
请将关键字public添加到您的类定义中。 您的测试类目前在其自己的程序集之外不可见。
namespace tests {
[TestClass]
public class SimpleTest {
[TestMethod]
public void Test() {
Assert.AreEqual("a","a", "same");
}
}
}
这有时会奏效。
检查“测试”菜单下的处理器体系结构是否与用于构建解决方案的处理器体系结
测试 - >测试设置 - >默认处理器架构 - > x86 / x64
如其他帖子中所述,请确保打开“测试资源管理器”窗口。 测试 - > Windows - >测试资源管理器
然后使用测试重建项目应该使测试显示在测试资源管理器中。
编辑:正如Ourjamie在下面指出的那样,做一个干净的构建也可能有所帮助。 除此之外,还有一件事我遇到了:
在Configuration Manager中未选中“构建”复选框,以获取我在解决方案下创建的新测试项目。
转到Build - > Configuration Manager。 确保为所有解决方案配置和解决方案平台检查了测试项目是否已构建复选框。
根据我最近的经验,以上所有都不起作用。 我的测试方法
public async void ListCaseReplace() { ... }
没有出现,但编译得很好。 当我删除了async
关键字时,测试资源管理器中显示的测试结果。 这是因为async void
是一种“即发即忘”的方法。 使方法成为async Task
,您将得到您的测试!
此外,没有将Test项目的配置设置为“Build”也会阻止测试显示。 Configuration Manager>检查您的测试以构建。
由于该项目是在原始海报所示的共享驱动器上。 VS.NET在加载和运行测试程序集之前需要信任网络位置。 阅读这篇博客文章 。
要允许VS.NET加载网络共享的内容,需要将它们(共享)添加到受信任位置。 要将位置添加到完整信任列表运行(显然根据您的环境进行修改):
caspol -m -ag 1.2 -url file:///H:/* FullTrust
要验证或列出运行的现有受信任位置:
caspol -lg
我发现的一个问题是,如果解决方案在网络驱动器/网络位置/共享驱动器上运行,则在测试资源管理器中找不到测试(没有显示)
您可以通过添加环境变量来解决此问题。
COMPLUS_LoadFromRemoteSources并将其值设置为1
我收到错误: "Failed to initialize client proxy: could not connect to vstest.discoveryengine.exe."
尝试以管理员身份运行Visual Studio。 这对我有用。
还有另一个Stack Overflow帖子讨论了这个错误 ,同样的解决方案适用于他们。 这个问题仍然存在。
我有同样的问题..在我的情况下,它是由私有属性 TestContext
引起的。
将其更改为以下内容有助于:
public TestContext TestContext
{
get;
set;
}
清理并构建解决方案后(如@Ourjamie的回答中所述),受测试的测试类中的测试方法可在测试资源管理器中找到。
尝试在网络共享上打开解决方案时遇到了同样的问题。 在这种情况下,测试资源管理器不会检测到任何单元测试。 解决方案原来是:
控制面板 - > Internet选项 - >“安全”选项卡 - >单击“内部网”,将保存网络共享的服务器IP地址或主机名添加到“站点”列表中。
在这之后,我重新编译了解决方案,现在测试出现了。 这应该与@BigT的答案非常相似。
用于解决一些常见测试问题的快速检查清单。 确保:
public
[TestClass]
属性 [TestMethod]
属性 如果这没有帮助,请尝试清理,重建解决方案并重新启动Visual Studio。
我有时会得到相同的症状。
我做的是:
1.关闭Test Explorer窗口
2.清理解决方案
3.重建解决方案
4.从Test - > Windows - > Test Explorer重新启动Test Explorer窗口。
我在Test Explorer窗口中进行了测试。
从顶部的菜单栏...
测试 - >运行 - >所有测试
您还可以从Test Explorer查看所有测试(测试 - > Windows - >测试资源管理器)
进一步使用VS 2012,如果您遗漏了任何内容,请尝试使用右上角的快速启动栏进行搜索(Ctrl + Q)“测试”
希望这可以帮助。
我发现解决此问题的最佳方法是创建.proj msbuild文件,并将您遇到问题的单元测试项目添加到此文件中,并使用命令行版本的mstest执行测试。 我在app.config中发现了一个小配置问题,只有在从mstest运行测试时才会出现 - 否则测试项目构建得很好。 此外,您还会发现此方法的任何间接引用问题。 一旦您可以使用mstest从命令行运行Unit测试,您就可以执行一个干净的解决方案,重建解决方案并正确发现您的测试。
在我的情况下,它是另一回事。 我安装了一个软件包然后将其卸载并重新安装了早期版本。 这留下了我的app.config中的残留configuration/runtime/asssemblyBinding/dependencyIdentity
重定向。 我不得不纠正它。 我通过查看“ Output
窗口并在下拉列表中选择“ Tests
”来计算出来。 错误消息在那里。 这是一种痛苦......我希望它可以帮助别人。
这更多的是帮助那些最终到达这里的人而不是回答OP的问题:
尝试关闭并重新打开visual studio,为我做了诀窍。
希望这有助于某人。
我知道这是一个较旧的问题,但在Visual Studio 2015中,我遇到了新创建的测试类未被识别的问题。 尝试了一切。 最终成为问题的是该课程没有“包含在项目中”。 我只是在重新启动Visual Studio时发现了这一点,并注意到我的测试类不在那里。 在显示隐藏文件时,我看到它以及我编写的其他类都没有包括在内。 希望有所帮助
当我尝试在不同的PC上构建解决方案时,我经常遇到这个问题。
我也在使用NUnit和Specflow。 默认情况下,我的测试项目以X86为目标,但我必须将其更改为X64。 步骤是1.测试菜单 - >测试设置 - 默认处理器架构 - > x64。 2.清理构建3.构建4.如果仍然没有显示测试。 5.转到工具扩展和更新然后安装NUnit和Specflow库6.清理构建7.构建
然后通常测试将出现在测试编辑器中。
我已将VS 2012更新到最新更新。 即视觉工作室更新3.这为我解决了问题。
对我而言,解决方案稍微复杂一点。
我刚刚将一个现有的解决方案带到我的机器上(从gitHub克隆),我们不跟踪Visual Studio创建的自动生成的.cs文件。 (对于每个功能文件,都有一个同名的.cs文件)
在没有关联的.cs文件的情况下打开解决方案实际上允许我导航到绑定的方法,因此看起来好像specflow已正确连接,但我无法在测试资源管理器中查看测试名称。
对于此问题,只需从项目中排除功能文件,然后重新包含它们,强制VS重新生成这些自动生成的代码隐藏文件。
之后,我能够在测试资源管理器中查看测试。
将我的解决方案从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 Unit Test Framework 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
我重建了所有这一切并解决了这个问题 - 所有测试都在测试资源管理器中找到,现在所有的测试都找到并且运行得很完美。
检查您的测试项目没有设置只在您的项目属性,以延缓标志 - >签名。 如果是,请取消选择它并进行干净的重建。
尝试在VS2013 Ultimate中的网络共享上打开解决方案时遇到了同样的问题。
我打开后纠正了这个问题
控制面板 - > Internet选项 - >“安全”选项卡 - >单击“本地Intranet”,单击站点并确保勾选“自动检测Intranet网络”。
这些都是很好的答案,但还有一个我知道的原因; 我刚碰到它。 在我的一个测试中,我有一条ReSharper消息,表明我有一个未使用的私有类。 这是我将要在即将进行的测试中使用的课程。 这实际上导致我的所有测试都消失了。
检查引用的程序集,查看可能将“Copy Local”设置为“False”的任何程序集。
如果您的测试项目构建到它自己的文件夹(例如bin / Debug)并且项目依赖于另一个程序集,并且References列表中的一个程序集被标记为Copy Local =“False”,则由于缺少依赖项而无法加载程序集构建后,您的测试不会加载。
这里的解决方案都没有帮助我。 对于一个解决方案不会发现测试,而引用相同项目的另一个解决方案工作正常。 我终于通过删除solutionname.v12.suo文件解决了这个问题。
看起来NUnit Framework 2.6.4与NUnit Test Adapter不兼容。 在网站上它提到测试适配器只能与NUnit Framework 2.6.3一起使用。
这是我的问题:1。我在VS2012中通过Nuget分别下载了NUnit和NUnit Test Adapter。 NUnit以某种方式更新到2.6.4突然间我没有看到列出的测试用例。
固定:
卸载Nuget和Nuget Test适配器
一个。 转到工具> Nuget> Nuget Pkg管理器>管理Nuget Pkg for Solution
湾 列出已安装的包
C。 点击管理
d。 取消检查您的项目
安装NUnit测试适配器,包括NUnit 2.6.3 Framework
清洁/重建解决方案
打开测试>测试资源管理器>全部运行
我看到了所有的测试用例
希望这可以帮助
我有同样的问题,但有点不同。
我使用的是visual studio 2012.由于某种原因,只有初始生成文件的测试正在运行。 但是另一个文件中的测试没有运行。 试过这里发布的不同解决方案,没有用。
最后我发现我在测试类中有一个私有方法,这是该类中的第一个方法。 我只是在测试方法之后移动了私有方法; 所以现在, [TestMethod]
属性的方法是类中的第一个方法。 奇怪,但现在它的工作原理。
希望有一天能帮助某人。
测试不喜欢异步方法。 例如:
[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();
}
它看到了测试。
添加我的答案,因为这是谷歌的最佳结果。
我正在使用Visual Studio 2015并且(在不知情的情况下 - 我刚刚运行Install-Package NUnit
)将NUnit3包NuGet安装到我的测试项目中。 我已经安装了NUnit Test Adapter扩展,但我的测试仍未显示。
通过工具>扩展和更新安装NUnit3测试适配器为我解决了这个问题。
我尝试了上述所有方法,但我的 Visual Studio 2012 仍然没有显示测试。 最后我去了一个测试类,发现它有一个 RootNamespace.FolderName 并且我删除了 .FolderName 将类放在根命名空间中,宾果游戏所有测试都回来了!
直到有一天,无法理解为什么它可以与原始命名空间一起正常工作。
我复制粘贴了方法声明,其中包括一个输入字符串参数。 忘记删除输入参数。
public void ExtractValueFromLineTest(string input) {}//test not discovered because of the string input param
这个只是咬了我一口。 我向我的项目添加了一个测试,但无法让它显示在测试资源管理器中。 我的旧测试都出现了。 最后,我意识到我只是在查看特定的播放列表,而没有将新测试添加到播放列表中。 如果您使用播放列表,请选择“所有测试”并查看 VS 是否找到您的测试并将其显示在测试资源管理器中。 然后您也可以将它们添加到所需的播放列表中。
Visual Studio Professional 2012,在这里更新 4。 在与测试类相同的项目中具有互操作函数定义(DllImport/extern)会使测试资源管理器感到困惑。 将 Interop 移动到一个单独的项目中,解决了这个问题。
我在 VS2013 Ultimate 中遇到了同样的问题。 我的问题是我正在创建一个 Windows 服务并且忘记卸载它。 所以服务正在运行,VS 无法访问导致整个测试套件根本没有加载的 DLL 之一。
这是另一个基于用户错误/愚蠢添加到列表中的...建>.<
发布此内容是希望它可以像我一样节省某人浪费一两个小时的时间!
我在使用针对“任何 CPU”平台配置的测试项目的 Windows 7 SP1 x64 上的 Visual Studio 2013 Update 4 中遇到了同样的问题。
问题是测试项目实际上被命名为“Tests”,并且会在第二次(重新)构建项目时消失。
例如,在我将项目重命名为“MyProject.Tests”后,测试不再消失。
我反复遇到的一个问题是没有在 Windows 8+ 上以管理员身份运行 Visual Studio(明确地)。 我尝试了列出的几个建议,但是直到我以管理员身份运行 VS 2013 之后,它们才显示单元测试(即使我的快捷方式设置为以这种方式打开 VS,无论是打开解决方案文件还是有时单击快捷方式它都没有'实际上不是以管理员身份打开)。
由于这些答案都没有涉及我遇到的原因,对于这个问题,我也会在这里添加我的答案。
就我而言,这是一个复制粘贴代码问题。 我们有一个TestProjectA
,其中有我们想要提取到它自己的测试项目 - TestProjectB
特定类型的测试。 现在的问题是,虽然TestProjectA
测试继续正常显示,但新TestProjectB
中的测试未显示在 VS 测试资源管理器中 - 除非您专门构建TestProjectB
或手动右键单击那里的测试并运行它。
原因是在复制粘贴代码时,某些命名空间没有更新:
TestProjectA.ModuleA
中的TestClassA
中有一个TestMethodA()
,文件路径为\\TestProjectA\\TestClassA.cs
\\TestProjectB\\TestClassB.cs
命名空间TestProjectA.ModuleA
中TestClassB
中的TestMethodA()
因此,visual Studio 在输出窗口中打印出一条消息,表明这两个项目的 TestId 相同,并且由于两个项目之间的 TestId 冲突,因此继续在测试资源管理器中显示TestProjectA
而不是TestProjectB
。 更正命名空间TestProjectB.ModuleB
为\\TestProjectB\\TestClassB.cs
固定的问题。
这个问题好像有这么多不同的解决方案不妨加上我自己的:
关闭 Visual Studio
将 C:\\Users\\username\\AppData\\Local\\Microsoft\\VisualStudio\\12.0\\ComponentModelCache 重命名为 ComponentModelCache.old
运行 Visual Studio,将重建组件缓存。
另一个可能会阻止发现测试的问题,通常在“测试”输出窗口中显示如下消息:
Failed to configure settings for runsettings plugin 'VSTest Run Configuration' as it threw following exception: 'An error occurred while parsing EntityName. Line 1, position 8.' Please contact the plugin author.
这可能是由于路径或文件名中包含需要转义才能解析为 xml 的字符造成的。 特别是&字符,因为<和>不允许出现在目录或文件名中。 这会导致测试发现失败并且无法识别测试,但我仍然可以通过单击边距使用 Resharper 手动运行测试。
您可以做的最简单的事情是,只需将这些文件从文件资源管理器拖放到测试项目中即可。 再次构建项目,一切顺利!
或者
在文本编辑器中打开测试项目的.csproj
文件并手动包含要编译的文件名。 在文件中搜索Compile
标记并添加要运行的文件。
<ItemGroup>
<Compile Include="TestSettings.cs" />
<Compile Include="TestLibrary.cs" />
<Compile Include="UnitTest1.cs" />
</ItemGroup>
为您的文件添加 Compile 标记并保存它。 现在运行测试。 将检测并运行带有单元测试的文件。
问题是测试运行器被配置为不从远程驱动器运行测试。 当我将项目复制到本地驱动器时,它运行良好,但我需要在共享驱动器上使用它(不记得为什么)。
我读到它可以配置为从共享驱动器工作,但从来没有这样做,因为当我发现解决方案时,我已经在 Debian 上切换到 MonoDevelop。
我阅读了所有现有的答案,发现我的 (xUnit) 测试没有被发现,因为我已经删除了“未使用”的引用,更具体地说,是xunit.execution.desktop
。 重新安装 xUnit 包解决了我的问题。
Visual Studio 2015 (v.14 .....) - 同样的问题在这里
原因:不同版本的 NUnit 和 NUnit 测试适配器 就我而言,我拥有最新版本的 NUnit (3.5) 和 NUnit 测试适配器,但测试适配器不是正确的。 对于 NUnit 3 及更高版本,必须使用 NUnit3TestAdapter
解决方案:卸载“有故障”的 NUnint 测试适配器并安装 UNit3TestAdapter v.3.5.0(现在最新的是 3.6.0 但没有使用它以保持与 NUnit 相同)
重建解决方案测试后弹出:)
就我而言,我有 3 个使用 Visual Studio 2017 创建的测试项目(但我认为这无关紧要),而测试资源管理器仅发现了其中两个。 我意识到第三个项目有一个不同版本的Microsoft.VisualStudio.QualityTools.UnitTestFramework
dll。 我在 NuGet 管理器中更新了它,测试出现了。
我们正在使用 xunit 并且解决方案对我有用,团队正在删除文件夹 %TEMP%\\VisualStudioTestExplorerExtensions
阅读此线程。
您可以右键单击测试方法并选择运行测试/运行单元测试选项。 这应该会打开测试窗口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.