使用F#、FsUnit与dotnet命令行执行dotnet test时提示无可用测试的问题
问题排查与解决方案
核心问题原因
- 项目类型错误:当前项目是Console类型(
<OutputType>Exe</OutputType>),dotnet test默认不会扫描可执行文件中的测试用例,测试项目需设置为类库类型。 - 缺少测试适配器:未安装xunit测试发现器包,导致
dotnet test无法识别标记了[Fact]的测试方法。
具体修复步骤
1. 修改项目配置文件
打开CustomerProject.fsproj,将<OutputType>Exe</OutputType>替换为<OutputType>Library</OutputType>,修改后的PropertyGroup如下:
<PropertyGroup> <OutputType>Library</OutputType> <TargetFramework>net6.0</TargetFramework> </PropertyGroup>
2. 添加xunit测试适配器包
在项目根目录执行命令:
dotnet add package xunit.runner.visualstudio
该包是xunit提供的测试发现器,负责让dotnet test识别并运行测试用例。
3. 移除冗余依赖(可选)
Microsoft.TestPlatform包无需单独安装,Microsoft.TestPlatform.TestHost和xunit.runner.visualstudio已包含所需依赖,可执行命令移除:
dotnet remove package Microsoft.TestPlatform
最终项目文件示例
修改后的.fsproj内容如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Library</OutputType> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> <ItemGroup> <Compile Include="Customer.fs" /> <Compile Include="CustomerTests.fs" /> </ItemGroup> <ItemGroup> <PackageReference Include="FsUnit" Version="5.0.5" /> <PackageReference Include="FsUnit.Xunit" Version="5.0.5" /> <PackageReference Include="Microsoft.TestPlatform.TestHost" Version="17.3.2" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.5" /> </ItemGroup> </Project>
验证测试
执行dotnet test命令,此时应该能正常发现并运行你的测试用例。
注:F#项目的文件编译顺序需保证业务代码(
Customer.fs)在测试代码(CustomerTests.fs)之前,当前配置已符合要求。
内容的提问来源于stack exchange,提问作者Knows Not Much
相关产品推荐
相关产品推荐

