自从我安装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测试资源管理器成功找到单元测试或在给出的例子中显示问题。


当前回答

美国小妞C + +:

由于c++测试没有特别的问题,但主题是非常相同的,下面是当我在测试发现方面遇到麻烦时帮助我的方法。

如果您只安装了带有c++的桌面开发,那么解决方案是同时安装带有可选的c++通用Windows平台工具的通用Windows平台开发。您可以在visual studio web安装程序中选择这些。

之后,重新构建您的测试项目,测试发现就可以工作了。

顺便说一下,我在VS2017中创建了单元测试项目。这可能很重要,因为一些用户提到,他们在从VS2015迁移到VS2017的项目中有发现问题。

其他回答

我在VS 2017找到我的UnitTest时也遇到了麻烦。这不是约翰问的确切问题-但这是谷歌的第一个结果,我来寻找,所以我想分享我的问题。

我有一个遗留的解决方案,从VS2010回到VS2013, VS2015。现在在VS2017中,[TestMethod]属性的名称空间似乎已经改变了。

在它被使用之前

Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0

我在项目中创建了一个新的Test.dll,这是默认使用的

Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0

所以我的解决方案是从VS2017中创建一个新的UnitTest项目。也许更改旧测试项目的程序集引用也会起作用。新的参考VS2017确实发现了这些单元测试。

我也面临着同样的问题,在我的情况下才能解决

我打开windows控制台(windows键+ cmd)。 导航到创建项目的文件夹。 执行命令“dotnet test”,它基本上与visual studio执行的测试相同,但当你通过控制台运行它时,它可以让你看到完整的跟踪。 我得到了这个错误信息"TestClass属性定义在非公共类mstest。testcontroller。basetest " 所以我去到测试用例并将其标记为公共,重新构建,我的测试被正确显示

. 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。

美国小妞C + +:

由于c++测试没有特别的问题,但主题是非常相同的,下面是当我在测试发现方面遇到麻烦时帮助我的方法。

如果您只安装了带有c++的桌面开发,那么解决方案是同时安装带有可选的c++通用Windows平台工具的通用Windows平台开发。您可以在visual studio web安装程序中选择这些。

之后,重新构建您的测试项目,测试发现就可以工作了。

顺便说一下,我在VS2017中创建了单元测试项目。这可能很重要,因为一些用户提到,他们在从VS2015迁移到VS2017的项目中有发现问题。

我知道OP在他的清单上列出了这一点,但在进行Visual Studio 2017的干净安装和设置新项目时,很容易忽略这一点。除了NUnit项目模板和NUnit框架,还需要单独安装NUnit适配器,例如使用NuGet命令install - package NUnit3TestAdapter -Version 3.9.0。在此之后,Visual Studio Community 2017开始发现单元测试没有任何问题。