自从我安装它以来,我一直在与VS 2017挣扎 . 现在看来,单元测试只能从命令行“dotnet test”运行 .
我的项目是.NET Core 1.1.1 . 我安装了SDK和1.1.1的框架更新 .
我已经在MSDN(https://msdn.microsoft.com/en-us/library/ms182532.aspx)上尝试了这个样本,它也完全以同样的方式失败了 .
测试和主项目的所有NuGet包都是最新的 . 测试项目和主项目都没有错误地构建 . 测试从命令行成功运行 .
有没有人在VS 2017中进行单元测试,如果是这样的话怎么样?
谢谢,约翰
更新 - 扩展
以下是一个无法在GitHub上运行的简单测试项目的示例 . 这是xUnit的一个例子,但我尝试过在MS测试中构建的NUnit和visual studio . 无论我做什么测试或改变我都无法让VS测试运行器找到任何测试 .
我试过的
-
删除VS测试缓存文件
DEL %TEMP%\VisualStudioTestExplorerExtensions
-
重启VS.
-
关闭/打开测试资源管理器
-
for xUnit安装
Microsoft.DotNet.InternalAbstractions
(see SO post) -
for NUnit确保安装了适配器,并且与NUnit包的版本(3)相同
-
test -> test settings -> default processor architecture
设置为x86
The Question
任何人都可以在VS2017(.csproj项目文件)中提供.Net Core 1.1.0解决方案的工作示例,其中VS测试资源管理器成功找到单元测试 OR 向我展示给出的示例中的问题 .
29 回答
在我的情况下问题是项目类型设置为静态库(lib),它应该是一个动态库(DLL)
就我而言,解决方案中存在UWP项目导致问题 .
当我卸载UWP项目时,发现了测试 . 当我装回来时,测试再次消失 .
尝试卸载所有项目并仅保留测试项目 . Test Runner中出现了十个重建解决方案和测试 . 逐个加载项目并每次重建解决方案以找出导致问题的项目
sample repo
VS bug report
我在VS 2017找到我的UnitTest时遇到了麻烦 . 这不是约翰所问的确切问题 - 但这是谷歌中我第一次找到的结果,所以我想分享我的问题 .
我有一个传统的解决方案从VS2010回来VS2013,VS2015 . 现在在VS2017中,似乎
[TestMethod]
属性的名称空间已经改变 .在它使用之前
我在项目中创建了一个新的Test.dll,默认情况下使用了一个
所以我的解决方案是在VS2017中创建一个新的UnitTest项目 . 也许改变旧测试项目的程序集引用也会起作用 . 随着新的参考VS2017确实发现了那些单元测试 .
我遇到了同样的问题,通过以下方式让它工作......:
首先关闭所有打开的Visual Studio实例并删除此文件夹:%TEMP%\ VisualStudioTestExplorerExtensions . (Running tests with Visual Studio)
转到Nuget包管理器并首先安装Microsoft.NET.Test.Sdk(15.3.0-preview-20170425-07),然后安装xunit.runner.visualstudio(2.3.0-beta1-build1309) . 请参阅随附的Nuget屏幕截图,查看我必须安装的所有软件包,以获取最新的VS 2017以检测我的测试 .
忘记让测试类 public 阻止内部的测试方法被发现
我有一个默认的xUnit项目并删除了示例UnitTest1.cs,用控制器测试类替换它,并进行了几次测试,但没有找到
长话短说,在更新xUnit,Test.Sdk,xUnit.runner包并重建项目后,我遇到了构建错误:
值得庆幸的是,更新版本抛出了这个异常,以免给我带来麻烦
修改测试类是公开修复我的问题
我知道OP在他的清单上列出了这个,但是在干净安装Visual Studio 2017并设置新项目时很容易忽略这一点 . 除了NUnit project template和NUnit Framework之外,还需要单独安装NUnit适配器,例如使用NuGet命令
Install-Package NUnit3TestAdapter -Version 3.9.0
. 之后,Visual Studio社区2017开始发现单元测试没有任何问题 .对我来说,更容易创建一个与Visual Studio 2017完美配合的新测试项目......只需根据需要复制测试文件,添加引用和NuGet包 .
起初,我试过使用MSTest . 之后,我将其更改为Nunit测试 . 然后我想支持MSTest . 我删除了所有nUnit代码和引用,但Test Explorer没有显示MSTest方法 . 解决方案:我删除了所有mstest nuget引用并重新安装 . 完成 .
发现
上面的顶部答案对我不起作用(重新启动,更新到版本1.1.18 ...我已经更新,删除临时文件,清除NuGet缓存等) .
我发现在不同的测试项目中我对 MSTest.TestAdapter 和 MSTest.Framework 有不同的引用(我的解决方案有两个) . 有人指出1.1.18喜欢......
packages.config
......但是另一个引用了1.1.11 . 上面的一些答案导致了这一发现当重新启动Visual Studio后,我的临时目录(%TEMP%\ VisualStudioTestExplorerExtensions \)中出现了两个版本的库 .
解决方案
只需将packages.config更新到1.1.18版本就可以恢复VS中的单元测试功能 . 似乎有一些错误不允许MSTest库的并行引用 . 希望这对你有所帮助 .
More info:
在我的情况下,我将测试项目定位到
x64
架构,并将测试设置架构(test-> Default Processor Architecture)更改为x86
. 他们不匹配 .将测试设置架构设置为
x64
并重建后,再次发现所有测试 .就我而言,这是一个项目,我已经从早期的.Net版本升级了测试项目 . 在app.config中,我有以前版本的依赖程序集的程序集 .
在app.config中修复了assembnlybindings之后,我的测试被发现了 .
刚出现这个问题时,visual studio无法找到我的测试,除了方法之外无法看到按钮运行它们,并且它们没有通过运行项目中的所有测试来获取 .
结果我的测试类不公开!公开让VS发现测试 .
在我的情况下,在将项目移动到新解决方案后,测试资源管理器无法找到我的测试 .
答案很简单,我在项目中引用了旧的MS Test Adapter .
我在cs.proj文件中的MS Test Adapter版本1.1.11下面有一行副本:
<Import Project="..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props')" />
要解决这个问题,
右键单击项目,然后选择卸载项目 .
右键单击项目,然后选择编辑
删除导入旧版适配器的行 .
右键单击项目,然后选择“重新加载项目” .
重建解决方案/项目
确保您使用的是正确的Microsoft.NET.Test.Sdk:
不要使用预发布的 . 或者您必须更改为控制台应用程序(而不是库) . 我有类似的问题,但随着最新版本(15.0.0)它再次开始工作 .
此外,您可能需要添加:
但我认为这不是必须的 .
对我来说,更改测试项目的
.csproj
文件中的TargetFramework至
工作 .
我有同样的问题,我通过将 application output type 更改为 Console Application 来解决它,如下所示:
在我的情况下,以上都没有对我有帮助 . 但是,我将NUNit3TestAdapter降级到版本3.8.0,然后升级到最新版本(3.10.0)
我遇到过同样的问题 . 我的解决方案没问题,但突然当我打开解决方案时,我发现测试已经消失了 .
最后,我将
Microsoft.VisualStudio.TestPlatform.TestFramework
和Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
软件包降级为一个非常旧的版本(使用NuGet管理器),测试方法出现了 . 然后我升级到最新版本,仍然有那里 .So just downgrade and upgrade packages.
有时,我发现如果你的单元测试代码中有stackoverflow异常,visual studio会将单元测试用例标记为未运行,并将停止运行其他测试用例 .
在这种情况下,您必须找出导致stackoverflow异常的情况 .
不要阅读MSDN下的过时文章 . .NET Core相关材料位于docs.microsoft.com下
https://docs.microsoft.com/en-us/dotnet/articles/core/testing/
一般来说,您需要一个.NET Core控制台应用程序来包含单元测试用例 .
这对我有用(不知道是否是更改工作区损坏了某些内容的结果):
在%TEMP%\ VisualStudioTestExplorerExtensions中删除VS测试缓存文件并重新启动VS2017 .
解决方案是从我的单元测试项目中删除我的
app.config
文件 . 测试将重新出现!此文件引用了bindingredirects中的一些dll,这些dll实际上不存在于项目引用中 . 重新添加项目严格必需的装配绑定 .
删除旧的.dll应该有所帮助 . 清除位于C:\ Users(yourusername)\ AppData \ Local \ Temp的%TEMP%目录中的临时文件
对我来说问题是我错误地将测试用例放在内部课堂中
这导致测试用户无法识别 .
问题
问题是Visual Studio对机器上的dotnet核心版本感到“困惑” . 当我去控制面板 - >卸载程序时,我安装了8个不同的dotnet核心SDK和Runtimes . 这在某种程度上导致VS在尝试查找测试时默默地出错 .
验证问题
您可以通过转到命令行并在
$ dotnet --version
上获取dotnet的版本来验证问题 . 如果您看到除安装的最新版本以外的任何内容,那么您的机器会出现一些不匹配的情况并没有使用正确的版本 . 示例...如果您安装了dotnet核心1.0.1
,但是当您在命令提示符处获得版本时它会显示1.0.0
这是一个问题 .解决方案
删除所有旧的东西 . 我开始只使用我需要删除的内容(最旧的dotnet rc版本),但在测试问题时仍然提供了错误的版本 . 最后我承认要做一个彻底清洁 . 一世...
卸载了所有Visual Studio应用程序(在我的机器VS2015和VS2017上)
卸载了所有版本的dotnet核心(即使是最新版本)
在我的机器完全没空的所有VS和donet后,我安装了 only VS2017(它附带最新的dotnet) . 我创建了一个xUnit测试项目,测试资源管理器立即找到了测试 SOLVED
这可能看起来有点矫枉过正,但我花了两周的时间试图以其他方式解决这个问题 . 如果您遇到问题,即使卸载/重新安装项目可能需要数小时,也可能会节省您的时间 .
参考文献
我尝试了一切,但没有任何帮助 . 在我的情况下,我有一个包含多个测试项目的解决方案,其中一些使用旧的ms-test框架,因此Visual Studio只找到了那些 .
我为所有测试项目安装了测试框架包,如accepted answer所示 . 然后删除旧质量工具的引用,重新启动Visual Studio,现在我可以看到所有测试 .
在我的情况下,事实证明我只需要 upgrade 我的测试适配器和测试框架 . 完成 .
使用NuGet包管理器的示例:
随着Visual Studio 2017的发布以及从
project.json
格式转换为csproj
格式,.NET Core测试适配器的API发生了变化 . 这使现有的dotnet-test-*
适配器如dotnet-test-nunit
已过时 .适配器已更新,但您在Visual Studio中或在命令行上使用
dotnet test
设置和运行测试的方式需要在测试项目中使用不同的引用 . Beware 您找到的任何文档引用dotnet-test-*
格式的包,因为它们已过时 .首先,即使您正在测试的代码是.NET Standard, your test project must target a specific platform, either .NET Core or .NET Framework. It cannot target .NET Standard . 这是因为测试的目标指示了运行测试的平台 . .NET Standard就像PCL(可移植类库),因为它可以在许多平台上运行 .
接下来,您需要添加对
Microsoft.NET.Test.Sdk
的引用,您选择的测试框架和兼容的测试适配器 . 对于NUnit,您的引用将如下所示,上面的评论提到添加,
这不是严格要求,但可以提供帮助 . 它由Visual Studio自动添加到所有单元测试项目中,以帮助它快速查找带有测试的项目 .
如果您的测试未出现在Visual Studio中,首先要尝试关闭解决方案,然后重新打开它们 . 在编辑项目时,Visual Studio中似乎没有检测到项目更改的错误 .
有关更多信息,请参阅Testing .NET Core with NUnit in Visual Studio 2017
对于C:
由于C测试没有特别的问题,但主题非常相似,当我遇到测试发现问题时,这就是帮助我的原因 .
如果您只安装了 Desktop development with C++ ,那么解决方案是使用可选的 C++ Universal Windows Platform tools 安装 Universal Windows Platform development . 您可以在visual studio Web安装程序中选择它们 .
然后,重建您的测试项目,测试发现应该有效 .
顺便说一句,我在VS2017中创建了单元测试项目 . 可能很重要,因为有些用户提到,他们在项目中有发现问题,从VS2015迁移到VS2017 .