Joh*_*ite 202 unit-testing visual-studio-2017
自从我安装它以来,我一直在与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测试运行器找到任何测试.
DEL %TEMP%\VisualStudioTestExplorerExtensionsMicrosoft.DotNet.InternalAbstractions(参见SO帖子)test -> test settings -> default processor architecture 设置为x86问题
任何人都可以在VS2017(.csproj项目文件)中提供.Net Core 1.1.0解决方案的工作示例,其中VS测试资源管理器成功找到单元测试或在给出的示例中向我显示问题.
Qua*_*yst 186
就我而言,事实证明我只需要升级我的测试适配器和测试框架.完成.
使用NuGet包管理器的示例:
Pma*_*Ace 123
这对我来说很有用(不知道是否是更改工作区损坏了某些内容的结果):
在%TEMP%\ VisualStudioTestExplorerExtensions中删除VS测试缓存文件并重新启动VS2017.
Rob*_*use 54
随着Visual Studio 2017的发布以及从project.json格式到csproj格式的转变,.NET Core测试适配器的API发生了变化.这使现有的dotnet-test-*适配器dotnet-test-nunit过时了.
适配器已更新,但您在Visual Studio或命令行中设置和运行测试的方式dotnet test需要在测试项目中使用不同的引用.请注意您发现的任何文档,dotnet-test-*因为它们已过时而引用了格式的包.
首先,您的测试项目必须针对特定平台,.NET Core或.NET Framework.即使您测试的代码是.NET Standard,它也无法以.NET Standard为目标.这是因为测试的目标指示了运行测试的平台..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>
Run Code Online (Sandbox Code Playgroud)
上面的评论提到添加,
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这不是严格要求,但可以提供帮助.它由Visual Studio自动添加到所有单元测试项目中,以帮助它快速查找带有测试的项目.
如果您的测试没有出现在Visual Studio中,首先要尝试关闭解决方案,然后重新打开它们.在编辑项目时,Visual Studio中似乎没有检测到项目更改的错误.
有关更多信息,请参阅在Visual Studio 2017中使用NUnit测试.NET Core
小智 40
我有同样的问题,并通过以下方式让它工作..:

kid*_*oca 31
忘记让测试类公开防止里面的测试方法被发现
我有一个默认的xUnit项目并删除了示例UnitTest1.cs,用控制器测试类替换它,并进行了几次测试,但没有找到
长话短说,在更新xUnit,Test.Sdk,xUnit.runner包并重建项目后,我遇到了构建错误:
错误xUnit1000测试类必须是公共的
值得庆幸的是,更新后的版本抛出了这个异常,以免给我带来麻烦
修改测试类是公开修复我的问题
Mig*_*Slv 10
在我的情况下,我将测试项目定位到x64架构,并将测试设置架构(测试 - >默认处理器架构)更改设置为x86.他们没有匹配.
将测试设置架构设置为x64并重建后,再次发现所有测试.
对我来说,问题是我错误地将测试用例放在内部类中
[TestClass]
internal class TestLib {
}
Run Code Online (Sandbox Code Playgroud)
这导致无法识别测试用例。
小智 7
我在VS 2017找到我的UnitTest时遇到了麻烦.这不是约翰所问的确切问题 - 但这是谷歌中第一个我寻找的结果,所以我想分享我的问题.
我有一个传统的解决方案从VS2010回来VS2013,VS2015.现在在VS2017中,[TestMethod]属性的名称空间似乎已经改变.
在它使用之前
Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0
Run Code Online (Sandbox Code Playgroud)
我在项目中创建了一个新的Test.dll,默认情况下使用了一个
Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0
Run Code Online (Sandbox Code Playgroud)
所以我的解决方案是在VS2017中创建一个新的UnitTest项目.也许改变旧测试项目的程序集引用也会起作用.随着新的参考VS2017确实发现了那些单元测试.
不要阅读MSDN下的过时文章..NET Core相关材料位于docs.microsoft.com下
https://docs.microsoft.com/en-us/dotnet/articles/core/testing/
一般来说,您需要一个.NET Core控制台应用程序来包含单元测试用例.
小智 5
确保您使用的是正确的Microsoft.NET.Test.Sdk:
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
Run Code Online (Sandbox Code Playgroud)
不要使用预发布的.或者您必须更改为控制台应用程序(而不是库).我有类似的问题,但随着最新版本(15.0.0)它再次开始工作.
此外,您可能需要添加:
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但我认为这不是必须的.
就我而言,在我将项目移至新解决方案后,测试资源管理器找不到我的测试。
答案很简单,我在我的项目中引用了旧的 MS 测试适配器。
我的 cs.proj 文件中有 MS 测试适配器 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')" />
为了解决这个问题,
我知道OP已在他的清单中列出了这一点,但是在执行Visual Studio 2017的全新安装并设置新项目时,很容易忽略这一点。除了NUnit项目模板和NUnit Framework,还需要单独安装NUnit适配器,例如,使用NuGet命令Install-Package NUnit3TestAdapter -Version 3.9.0。之后,Visual Studio Community 2017开始没有任何问题地发现单元测试。
| 归档时间: |
|
| 查看次数: |
140376 次 |
| 最近记录: |