我有一些使用内置 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");
}
}
}
我现在发现(请参阅下面已删除的答案)这是因为它位于共享驱动器上,但我还不知道如何解决它。 (可能是关于安全设置的一些东西)。
我有相同的症状,但在不同的情况下。
我不得不在 Peter Lamberg 的解决方案中添加一个额外的步骤——清理您的解决方案/项目。
我的单元测试项目针对 x64。当我创建项目时,它最初是针对 x86 的。
切换到 x64 后,我所有的单元测试都消失了。
我必须进入测试菜单-> 测试设置-默认处理器架构-> x64。
他们仍然没有出现。
做了一个构建。
还是没有出现。
终于做了一个清洁
然后他们出现了。
我发现清洁解决方案和清洁对于在设置更改时获得解决方案来打球非常有用。有时我不得不走极端,删除 obj
和 bin
目录并进行重建。
请将关键字 public 添加到您的类定义中。您的测试类目前在其自己的程序集之外不可见。
namespace tests {
[TestClass]
public class SimpleTest {
[TestMethod]
public void Test() {
Assert.AreEqual("a","a", "same");
}
}
}
[TestMethod]
是静态的。
[TestMethod]
是静态的,因为这是新测试项目中的 UserTest1.cs
所拥有的!也解决了我的问题。
static
放在您的方法前面。我不知道为什么我经常出于习惯这样做。
这有时有效。
检查测试菜单下的处理器架构是否与您用于构建解决方案的架构相匹配。
测试 -> 测试设置 -> 默认处理器架构 -> x86 / x64
如其他帖子中所述,请确保您打开了测试资源管理器窗口。测试 -> Windows -> 测试资源管理器
然后使用测试重建项目应该使测试出现在测试资源管理器中。
编辑:正如Ourjamie 在下面指出的那样,进行干净的构建也可能会有所帮助。除此之外,我还遇到了一件事情:
对于我在解决方案下创建的新测试项目,在配置管理器中未选中“构建”复选框。
转到构建 -> 配置管理器。确保您的测试项目为所有解决方案配置和解决方案平台选中了构建复选框。
我有 Visual Studio 2012,但在测试资源管理器中看不到测试,
所以我安装了以下内容:NUnit Test Adapter
这为我解决了这个问题!
Install-Package NUnitTestAdapter
获得
根据我最近的经验,上述所有方法均无效。我的测试方法
public async void ListCaseReplace() { ... }
没有出现,但编译正常。当我删除 async
关键字时,测试显示在测试资源管理器中。这是因为 async void
是一种“即发即弃”的方法。使用方法 async Task
,您将得到您的测试!
此外,没有将测试项目的配置设置为“构建”也会阻止测试显示。配置管理器 > 检查您的测试以构建。
由于该项目位于共享驱动器上,如原始海报所示。 VS.NET 在加载和运行测试程序集之前需要信任网络位置。 Have a read of this blog post。
要允许 VS.NET 加载网络共享的内容,需要将它们(共享)添加到受信任的位置。要将位置添加到完整信任列表运行(显然根据您的环境需要进行修改):
caspol -m -ag 1.2 -url file:///H:/* FullTrust
要验证或列出现有的受信任位置,请运行:
caspol -lg
CasPol.exe
可以在 %windir%\Microsoft.NET\Framework[64]\[version]
下找到。确认您正在为正确的体系结构设置策略。来源:msdn.microsoft.com/en-us/library/cb6t8dtz%28v=vs.100%29.aspx
我发现的一个问题是,如果解决方案在网络驱动器/网络位置/共享驱动器上运行,则在测试资源管理器中找不到测试(没有显示)
您可以通过添加环境变量来解决此问题。
COMPLUS_LoadFromRemoteSources 并将其值设置为 1
我遇到了同样的问题。在我的情况下,它是由 私有财产 TestContext
引起的。
将其更改为以下有助于:
public TestContext TestContext
{
get;
set;
}
在清理和构建解决方案后(如@Ourjamie 的回答中所述),受影响的测试类中的测试方法在测试资源管理器中可用。
我在尝试在网络共享上打开解决方案时遇到了同样的问题。在这种情况下,测试资源管理器不会检测到任何单元测试。解决方案原来是:
控制面板 -> Internet 选项 -> “安全”选项卡 -> 单击“Intranet”,将保存网络共享的服务器 IP 地址或主机名添加到“站点”列表。
完成此操作后,我重新编译了解决方案,现在出现了测试。这应该与@BigT 的答案非常相似。
用于解决一些常见测试问题的快速检查列表。确保:
测试类和测试方法是公共的 测试类有 [TestClass] 属性 测试方法有 [TestMethod] 属性
如果这没有帮助,请尝试清理、重建解决方案并重新启动 Visual Studio。
UTA001: TestClass attribute defined on non-public class
我收到错误:"Failed to initialize client proxy: could not connect to vstest.discoveryengine.exe."
尝试以管理员身份运行 Visual Studio。这对我有用。
There is another Stack Overflow post discussing this error,同样的解决方案也适用于他们。问题仍然是为什么这有效。
我有时也会出现同样的症状。
我所做的是: 1. 关闭测试资源管理器窗口 2. 清理解决方案 3. 重建解决方案 4. 从测试 -> Windows -> 测试资源管理器重新启动测试资源管理器窗口。
我在测试资源管理器窗口中进行了测试。
从顶部的菜单栏...
测试 -> 运行 -> 所有测试
您还可以从测试资源管理器查看所有测试(测试 -> Windows -> 测试资源管理器)
进一步使用 VS 2012,如果您错过任何内容,请尝试使用右上角的快速启动栏(Ctrl + Q)“测试”进行搜索
希望这可以帮助。
Microsoft.VisualStudio.TestTools.UnitTesting
编写的测试,知道我做错了什么吗?
我发现解决此问题的最佳方法是创建一个 .proj msbuild 文件并将您遇到问题的单元测试项目添加到此文件中,并使用 mstest 的命令行版本执行测试。我在我的 app.config 中发现了一个小配置问题,该问题仅在从 mstest 运行测试时出现 - 否则测试项目构建得很好。此外,您还会发现此方法的任何间接参考问题。一旦你可以使用 mstest 从命令行运行单元测试,你就可以做一个干净的解决方案,重建解决方案,你的测试应该被正确地发现。
就我而言,这是另一回事。我已经安装了一个软件包,然后将其卸载并重新安装了早期版本。这在我的 app.config 中留下了一个残留的 configuration/runtime/asssemblyBinding/dependencyIdentity
重定向。我不得不纠正它。我通过查看 Output
窗口并在下拉菜单中选择“Tests
”找到了答案。错误消息在那里。这很痛苦......我希望它可以帮助别人。
这更多的是帮助最终来到这里的人,而不是回答 OP 的问题:
尝试关闭并重新打开视觉工作室,对我有用。
希望这可以帮助某人。
我知道这是一个较老的问题,但在 Visual Studio 2015 中,我遇到了新创建的测试类无法识别的问题。什么都试过了。最终的问题是该课程没有“包含在项目中”。我只是在重新启动 Visual Studio 并注意到我的测试类不存在时才发现这一点。在显示隐藏文件时,我看到它以及我编写的其他类都没有包括在内。希望有帮助
当我尝试在另一台 PC 中构建解决方案时,我多次遇到此问题。
我也在使用 NUnit 和 Specflow。默认情况下,我的测试项目以 X86 为目标,但我必须将其更改为 X64。步骤是 1. 测试菜单 -> 测试设置 - 默认处理器架构 -> x64。 2. Clean Build 3. Build 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 单元测试框架 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
我重建了所有,这解决了这个问题 - 所有测试都在测试资源管理器中找到,现在所有测试都找到并完美运行。
检查您的测试项目是否未在项目属性 -> 签名中设置为仅延迟签名。如果是,请取消选择它并进行干净的重建。
sn -Vr *,<public key token>
作为管理员跳过本地计算机上的签名检查
我在尝试在 VS2013 Ultimate 的网络共享上打开解决方案时遇到了同样的问题。
我通过打开解决了问题
控制面板 -> Internet 选项 -> “安全”选项卡 -> 单击“本地 Intranet”,单击站点并确保勾选“自动检测 Intranet 网络”。
这些都是很好的答案,但我知道还有一个原因;我刚碰到它。在我的一项测试中,我收到一条 ReSharper 消息,表明我有一个未使用的私人课程。这是我将在即将到来的测试中使用的课程。这实际上导致我所有的测试都消失了。
检查引用的程序集是否有任何可能将“复制本地”设置为“假”的程序集。
如果您的测试项目构建到它自己的文件夹(例如 bin/Debug)并且该项目依赖于另一个程序集,并且“引用”列表中的这些程序集之一被标记为 Copy Local = "False",则由于缺少依赖项和构建后您的测试将不会加载。
看起来 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 框架清理/重建解决方案打开测试 > 测试资源管理器 > 全部运行
我看到了所有的测试用例
希望这可以帮助
这里的解决方案都没有帮助我。一个解决方案不会发现测试,而引用相同项目的另一个解决方案工作正常。我终于通过删除 solutionname.v12.suo 文件解决了这个问题。
我有同样的问题,但有点不同。
我使用的是 Visual Studio 2012。出于某种原因,只有初始生成文件的测试正在运行。但是另一个文件中的测试没有运行。尝试了此处发布的不同解决方案,但没有奏效。
最后我发现我在测试类中有一个私有方法,这是类中的第一个方法。我只是将私有方法 移到了一个测试方法之后;所以现在,具有 [TestMethod]
属性的方法是类中的 first 方法。奇怪,但现在可以了。
希望有一天这对某人有所帮助。
测试不喜欢异步方法。例如:
[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(); }
添加我的答案,因为这是 Google 上的最佳结果。
我正在使用 Visual Studio 2015 并且(不知不觉 - 我刚刚运行 Install-Package NUnit
)将 NUnit3 包 NuGet 安装到我的测试项目中。我已经安装了 NUnit 测试适配器扩展,但我的测试仍然没有出现。
通过 Tools > Extensions and Updates 安装 NUnit3 测试适配器为我解决了这个问题。