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


当前回答

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

删除%TEMP%\VisualStudioTestExplorerExtensions中的VS测试缓存文件并重新启动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确实发现了这些单元测试。

在我的例子中,测试资源管理器将排除公共异步无效(c#)或公共异步Sub X() (VB.NET)的测试方法。

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

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

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

忘记将测试类设为公共,可以防止其中的测试方法被发现。

我有一个默认的xUnit项目,并删除了示例UnitTest1.cs,用一个控制器测试类替换它,并进行了几个测试,但没有找到。

长话短说,更新xUnit后,测试。Sdk, xUnit.runner包和重建项目,我遇到了一个构建错误:

测试类必须是公共的

值得庆幸的是,更新后的版本抛出了这个异常,为我省去了一些麻烦。

修改测试类为公共修复了我的问题。

从Visual Studio 2017迁移到2019时,我也遇到了同样的问题。我不得不在我所有的测试项目中重新安装Microsoft.NET.Test.Sdk。

在.NET框架的情况下,在测试项目中以前有对以下dll的引用:

Microsoft.VisualStudio.TestPlatform.TestFramework
Microsoft.VisualStudio.TestPlatform.TestFramework.Extentions

我删除了它们,并添加了参考:

Microsoft.VisualStudio.QualityTools.UnitTestFramework

然后所有的测试都出现了,并开始以与之前相同的方式工作。

我尝试了上面几乎所有的其他建议,但是简单地重新引用测试dll就可以了。 我把这个答案发给那些和我一样的人。