自从我安装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#)或公共异步Sub X() (VB.NET)的测试方法。

更仔细地查看输出窗口中的消息,显示来自:测试的输出,我看到了以下消息:

如果你在测试方法中使用async-await,那么return-type必须是Task。示例:public async Task Test.Class1.Test2()

对于每个消息,确保所有此类方法都返回Task。

其他回答

这对我来说很有效(不知道这是否是改变工作空间导致的损坏):

删除%TEMP%\VisualStudioTestExplorerExtensions中的VS测试缓存文件并重新启动VS2017。

美国小妞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开始发现单元测试没有任何问题。

有时,我发现如果在单元测试代码中有stackoverflow异常,visual studio会将该单元测试用例标记为未运行,并将停止运行该用例后面的其他测试用例。

在这种情况下,您必须找出导致stackoverflow异常的情况。

请确保您正在使用正确的Microsoft.NET.Test.Sdk:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />

不要使用预发布版本。或者你必须改变控制台应用程序(不是库)。 我也有类似的问题,但使用最新版本(15.0.0),它又开始工作了。

此外,你可能还需要补充:

<ItemGroup>
  <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>

但我认为没有必要。