我有一个简单的dotnet核心类库,其中包含一个XUnit测试方法:
TestLib.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.SDK" Version="15.9.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.console" Version="2.4.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.runners" Version="2.0.0" />
</ItemGroup>
</Project>
BasicTest.cs:
using Xunit;
namespace TestLib
{
public class BasicTest
{
[Fact(DisplayName = "Basic unit test")]
[Trait("Category", "unit")]
public void TestStringHelper()
{
var sut = "sut";
var verify = "sut";
Assert.Equal(sut, verify);
}
}
}
如果我在CLI上输入项目并键入dotnet build
,则项目将构建。如果输入dotnet test
,我会得到:
C:\git\Testing\TestLib> dotnet test
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build started, please wait...
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build completed.
Test run for C:\git\Testing\TestLib\bin\Debug\netstandard2.0\TestLib.dll(.NETStandard,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 16.0.0-preview-20181205-02
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
Unable to find C:\git\Testing\TestLib\bin\Debug\netstandard2.0\testhost.dll. Please publish your test project and retry.
Test Run Aborted.
要运行测试,我需要更改什么?
如果有帮助,VS Code也不会在其测试浏览器中显示测试。
答案 0 :(得分:10)
如果使用的是xUnit,请确保您的项目类型不是netstanderd。 As xUnit doesn't support netstanderd,将其更改为coreapp2.0或其他。
答案 1 :(得分:8)
在我的情况下,问题是我有一个xunit扩展项目。还有一个测试项目来测试扩展。当我在解决方案上运行dotnet test
时,我的扩展项目也被选为单元测试项目(花了一些时间才意识到这一点)。这样做的原因是它引用了一些xunit软件包。这些xunit软件包之一自动在您的csprj文件中设置<IsTestProject>true</IsTestProject>
属性。这实际上是一件好事,因为99.99%的引用xunit的项目实际上是单元测试。我最终可以通过显式设置
<PropertyGroup>
...
<IsTestProject>false</IsTestProject>
...
</PropertyGroup>
手动在我的csproj文件中。然后问题就解决了。
答案 2 :(得分:8)
我已经遇到过几次了,但我总是忘记发生了什么。我最近有:
我的测试项目的软件包:
我看到了:
找不到C:\ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll。请发布您的测试项目,然后重试。
我要做的就是将缺少的nuget包添加到我的测试项目中: “ Microsoft.NET.Test.SDK”
此时一切恢复正常。
答案 3 :(得分:7)
从nuget软件包管理器安装 Microsoft.NET.Test.Sdk
软件包解决了我的问题。
答案 4 :(得分:7)
我发现了一个非常有趣的版本兼容性问题。我确实按照常规做法升级了代码,然后切换到xUnit.runner.visualstudio 2.4.2。它停止为.Net Core 3.1工作。我不得不降级到2.4.1,它又开始工作了。
我的评论之一后的其他信息。
软件包xunit.runner.visualstudio版本<= 2.4.1包括对Microsoft.NET.Test.Sdk的引用。更高版本没有,因此您需要在项目中添加引用。
请参阅stackoverflow.com/a/63786758/3248302
答案 5 :(得分:6)
通过安装xunit.runner.visualstudio
修复了该问题。
答案 6 :(得分:6)
使用<TargetFramework>netcoreapp2.0</TargetFramework>
将Microsoft.NET.Test.Sdk从v16.2.0更新到v16.4.0之后,这发生在我身上。更新为<TargetFramework>netcoreapp3.0</TargetFramework>
为我解决了这个问题。
答案 7 :(得分:5)
我正在构建一个netcoreapp2.2测试项目,然后尝试从bin文件夹运行dotnet vstest
。我注意到Microsoft测试DLL来自:
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
没有输出到我的bin文件夹中。我运行的不仅仅是发布,而是在输出文件夹中包含了必需的DLL,然后我可以从那里运行dotnet vstest
。
答案 8 :(得分:5)
我创建了一个类库,并尝试在其中使用XUnit NuGet包。
我应该做的是使用以下命令创建了一个XUnit项目:dotnet new xunit -n TestProject
我找到了this helpful page。
答案 9 :(得分:3)
如果您以netstandard2.0为目标,则将无法使用。如果正在使用.NET Core。确保.csproj包含以下几行:
<TargetFramework>netcoreapp3.0</TargetFramework>
,还包含软件包Microsoft.NET.Test.Sdk
答案 10 :(得分:2)
我在Nunit(.net核心3.1)项目中遇到了同样的问题。 我使用的是Microsoft.NET.Test.SDK v16.6.1,我将版本降级为15.9.0。 它开始工作
答案 11 :(得分:1)
就我而言,问题是我瞄准了.NET Core 2.0,并切换到.NET Core 2.1解决了该问题。但是我使用的是Microsoft.NET.Test.SDK v16.4.0,而不是15.9.0。
答案 12 :(得分:1)
如果将xunit.runner.visualstudio
升级到大于2.4.1的版本,则会发生此错误。直到2.4.1及更高版本的版本都包含对Microsoft.NET.Test.Sdk
的引用,但更高版本没有,因此您需要在自己的项目中包含引用。
有趣的是,我发现即使无法通过CLI运行NCrunch,我仍然可以在没有其他参考的情况下运行测试。
答案 13 :(得分:0)
如果要通过克隆运行项目,则解决方案是安装Microsoft.NET.Test.Sdk。 如何 : 工具> Nuget程序包管理器>管理解决方案的Nuget程序包...>搜索Microsoft.NET.Test.Sdk并安装测试项目。
答案 14 :(得分:0)
发生此错误,根本原因是测试达到Windows路径的最大长度(MAX_PATH),该路径定义为260个字符。
答案 15 :(得分:0)
这也可能是由于无意中尝试运行非测试项目而引起的,通常发生在测试文件过滤器过大的情况下。
答案 16 :(得分:0)
尝试调试单元测试时遇到此错误。以下是我尝试的步骤。
是的!有效 :-) 千万不要错过尝试最后一个步骤;-)希望这对像我这样的人有所帮助。
答案 17 :(得分:0)
必须添加Microsoft.TestPlatform.TestHost
才能获得testhost.dll
。
我发现这个答案https://github.com/dotnet/sdk/issues/7171#issuecomment-261506546
答案 18 :(得分:0)
就我而言,有必要使用 nuget 包含对 MsTest.TestAdapter 模块的引用。
使用 MSTest.TestFramework 和 Microsoft.Net.Test.Sdk 的新项目不足以运行单个单元测试。
注意到在我的情况下,我使用的是面向 .NET 框架 4.8 而不是 .NET 核心的测试项目。虽然,我坚信此修复程序也可能适用于该平台