自从我安装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
重新启动和
关闭/打开测试资源管理器
为xUnit安装Microsoft.DotNet.InternalAbstractions(见SO post)
对于NUnit,确保适配器安装和NUnit包相同的版本(3)
Test -> Test Settings ->默认处理器架构设置为x86
这个问题
谁能提供一个VS2017中。net Core 1.1.0解决方案的工作示例?csproj项目文件),其中VS测试资源管理器成功找到单元测试或在给出的例子中显示问题。
. net Core测试适配器的API随着Visual Studio 2017的发布和项目的转移而改变。Json格式转换为csproj格式。这使得现有的dotnet-test-*适配器如dotnet-test-nunit过时了。
适配器已经更新,但是在Visual Studio中或在命令行上使用dotnet测试设置和运行测试的方式需要在测试项目中使用不同的引用。当心你发现的任何以dotnet-test-*格式引用包的文档,因为它们已经过时了。
首先,您的测试项目必须针对一个特定的平台,无论是。net Core还是。net Framework。它不能针对。net标准,即使你测试的代码是。net标准。这是因为测试的目标指示了在哪个平台下运行测试。. net Standard类似于PCL(可移植类库),因为它可以在许多平台上运行。
接下来,您需要添加对Microsoft.NET.Test的引用。Sdk,您选择的测试框架和兼容的测试适配器。对于NUnit,你的引用是这样的,
<itemgroup>
<packagereference Include="Microsoft.NET.Test.Sdk" Version="15.0.0"></packagereference>
<packagereference Include="NUnit" Version="3.7.1"></packagereference>
<packagereference Include="NUnit3TestAdapter" Version="3.8.0"></packagereference>
</itemgroup>
上面的一条评论提到,
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
这不是严格要求的,但可以有所帮助。它被Visual Studio自动添加到所有单元测试项目中,以帮助它快速找到带有测试的项目。
如果测试没有出现在Visual Studio中,首先要尝试关闭解决方案,然后重新打开它们。当你编辑项目时,Visual Studio中似乎有bug没有检测到项目的更改。
有关更多信息,请参见在Visual Studio 2017中用NUnit测试. net Core。
这个问题
问题是Visual Studio对机器上的dotnet核心版本感到“困惑”。当我进入控制面板->卸载程序时,我已经安装了8个不同的dotnet核心SDK和运行时。这在某种程度上导致VS在试图查找测试时无声地出现错误。
验证问题
您可以通过转到命令行并在$ dotnet——version上获取dotnet的版本来验证这个问题。如果你看到除了你安装的最新版本以外的任何东西,那么你的机器有一些不匹配,没有使用正确的版本。例子……如果你已经安装了dotnet核心1.0.1,但当你在命令提示符下看到版本时,它显示为1.0.0,这是一个问题。
解决方案
删除所有旧的东西。我开始只是我认为我需要删除(最古老的dotnet rc版本),但它仍然给出错误的版本时,测试的问题。最后,我承认要做一次彻底的清理。我…
卸载所有visual studio应用程序(在我的机器VS2015和VS2017上)
卸载所有版本的dotnet core(包括最新的)
在我的机器完全空了所有的VS和donet之后,我只安装了VS2017(它附带了最新的dotnet)。我创建了一个xUnit测试项目,测试资源管理器发现测试立即被解决了
这似乎有点过分,但我花了两周时间试图用其他方法解决这个问题。如果你有这个问题,尽管它可能需要你几个小时来卸载/重新安装,但它可能会节省你的时间。
参考文献
请参阅@epestic博客文章,在那里他提供了更多关于修复问题的细节。
在我的案例中,当我将项目转移到新的解决方案后,测试资源管理器无法找到我的测试。
答案很简单,我在我的项目中引用了旧的MS测试适配器。
我在我的电脑中有一个MS测试适配器版本1.1.11的副本。项目文件:
<进口项目= " \ packages MSTest TestAdapter。1.1。18 \构建net45 \ MSTest TestAdapter。道具“雾=“Exists (TestAdapter \ packages MSTest。1。1 . 18构建\ net45 \ MSTest TestAdapter道具)”。/>
为了解决这个问题,
右键单击项目并选择“卸载项目”。
右键单击项目,选择“编辑”
删除导入旧版本适配器的行。
右键单击项目并选择“重新加载项目”。
重建解决方案/项目