Mat*_*t W 31 c# unit-testing xunit.net .net-core
我有一个具有单个XUnit测试方法的简单dotnet核心类库:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在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.
Run Code Online (Sandbox Code Playgroud)
我需要更改什么才能运行测试?
如果有帮助,VS Code也不会在其测试浏览器中显示测试。
Arv*_*iya 36
Microsoft.NET.Test.Sdk
从nuget软件包管理器安装软件包解决了我的问题。
And*_*eas 36
就我而言,问题是我的目标是 .NET Core 2.0,而切换到 .NET Core 2.1 解决了这个问题。但是我使用的是 Microsoft.NET.Test.SDK v16.4.0 而不是 15.9.0。
Max*_*ios 16
我发现了一个非常有趣的版本兼容性问题。我确实按照正常做法升级了我的代码,然后切换到 xUnit.runner.visualstudio 2.4.2。它停止为 .Net Core 3.1 工作。我不得不降级到 2.4.1,它又开始工作了。
在我的评论之一之后的附加信息。
xunit.runner.visualstudio 版本 <= 2.4.1 包包含对 Microsoft.NET.Test.Sdk 的引用。更高版本不会,因此您需要将引用添加到您的项目中。
Dev*_*der 13
我遇到过几次,我总是忘记发生了什么。最近我有:
我的测试项目的包:
我看到:
无法找到 C:\PATH\bin\Debug\netstandard2.0\testhost.dll。请发布您的测试项目并重试。
我需要做的就是将丢失的 nuget 包添加到我的测试项目中:“Microsoft.NET.Test.SDK”
此时一切恢复正常。
我发现有5 个因素至关重要。
\n(其中 3 个以混合形式分布在其他答案中。)
1 到 4:
\n在适用于您的 .NET Core 版本的版本中添加这些 Nuget 包:
5:
\n现在确保 Microsoft.NET.Test.Sdk 设置为 NOT ExcludeAssets。为此,请使用以下方法之一:
ExcludeAssets="All"
从 Sdk 包条目中删除(如果存在):<!-- Bad: -->\n<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" ExcludeAssets="All" />\n<!-- Good: -->\n<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />\n
Run Code Online (Sandbox Code Playgroud)\n
从今天 18.05.2023 开始,使用 VS 2022,除了 xunit 之外,您还必须安装以下内容,否则 VS 将无法检测到测试。
就我而言,问题是我有一个xunit扩展项目。还有一个测试项目来测试扩展。当我运行dotnet test
我的解决方案时,我的扩展项目也被选为单元测试项目(花了一些时间才意识到这一点)。这样做的原因是它引用了一些xunit软件包。这些xunit软件包之一自动<IsTestProject>true</IsTestProject>
在csprj文件中设置属性。这实际上是一件好事,因为99.99%的引用xunit的项目实际上是单元测试。我终于可以通过显式设置解决此问题
<PropertyGroup>
...
<IsTestProject>false</IsTestProject>
...
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
手动在我的csproj文件中。然后问题解决了。
如果您的目标是 netstandard2.0,这将不起作用。如果使用.NET Core。确保 .csproj 包含以下行:
<TargetFramework>netcoreapp3.0</TargetFramework>
并且还包含包Microsoft.NET.Test.Sdk
如果升级xunit.runner.visualstudio
到 2.4.1 以上的版本,可能会出现此错误。2.4.1 及之前的版本包含对 的引用,Microsoft.NET.Test.Sdk
但更高版本不包含,因此您需要在自己的项目中包含该引用。
有趣的是,我发现 NCrunch 仍然在没有额外参考的情况下运行我的测试,即使我无法通过 CLI 运行它们。
必须添加Microsoft.TestPlatform.TestHost
才能得到testhost.dll
。我发现在这个答案https://github.com/dotnet/sdk/issues/7171#issuecomment-261506546
将Microsoft.NET.Test.Sdk从v16.2.0更新到v16.4.0后,这发生在我身上<TargetFramework>netcoreapp2.0</TargetFramework>
。正在<TargetFramework>netcoreapp3.0</TargetFramework>
为我解决此问题。
我正在构建一个 netcoreapp2.2 测试项目,然后尝试dotnet vstest
从 bin 文件夹运行。我注意到 Microsoft 测试 DLL 来自:
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
Run Code Online (Sandbox Code Playgroud)
没有被输出到我的 bin 文件夹。我不只是构建,而是运行了一个发布,它确实在输出文件夹中包含了必要的 DLL,然后我就可以dotnet vstest
从那里运行了。
归档时间: |
|
查看次数: |
10785 次 |
最近记录: |