api - 如何在 Nunit 测试(ASP.NET Core 项目,Visual Code)中只制作一个没有“程序定义了多个入口点”的 Main 方法
问题描述
我在 Visual Studio Code 中创建了 asp.net 核心项目dotnet new web api
(甚至没有针对 x86 系统的 c# 扩展的调试器支持)。然后我需要实现 Nunit 测试。我在dotnet new nunit
项目文件夹之一以及控制器、存储库、模型文件夹中使用命令创建。然后我在 test.csroj 中传递了对外部项目的引用。事实上,我需要将这些自动创建的依赖项传递给我的 main.csproj 文件,以便在我的 testfixture 类文件中使用 Nunit 类?!
<ItemGroup>
<PackageReference Include="NUnit" Version="3.11.0"/>
<PackageReference Include="NUnit3TestAdapter" Version="3.11.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0"/>
</ItemGroup>
因此,似乎我可以从 test.csproj 中删除这些引用,它们是在 dotnet new nunit 期间创建的(实际上我离开了,因为如果没有这些重复项,它也可能无法工作)......确实在这里我得到了两个使用 main 方法自动生成的文件,除了基本 Program.cs 文件中的 Main 之外 - 所以我需要在最后一种情况下注释 Main 以运行 nunit 测试。这里似乎是主要问题,我不知道如何开脱。这个 -
// <auto-generated> This file has been auto generated. </auto-generated>
using System;
[Microsoft.VisualStudio.TestPlatform.TestSDKAutoGeneratedCode]
class AutoGeneratedProgram {static void Main(string[] args){}}
- 出现在 Test.Program.cs(..testfolder\obj) 和 MainProject.Program.cs (..MainProject\obj\Debug\netcoreapp2.2) 中。添加 Test.csproj -<GenerateProgramFile>false</GenerateProgramFile>
并没有解决问题,GenerateAssemblyInfo 自动生成确实解决了错误。
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<IsPackable>false</IsPackable>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>
事实上,这个资源 https://andrewlock.net/fixing-the-error-program-has-more-than-one-entry-point-defined-for-console-apps- contains-xunit-tests/告诉它应该解决CS0017 程序定义了多个入口点。使用 /main 编译以指定包含入口点的类型。虽然我没有尝试使用这样的写作
<GenerateProgramFile Condition="'$(GenerateProgramFile)' == ''">true</GenerateProgramFile>
正如我所建议的那样,它与之前的提议相同。此外,在某些组合中,我的测试自动生成的 Main() 依赖于外部项目 obj Main(),因此在 Program.cs 中注释 Main() 时,它无法完全启动。我也无法添加 Exe в MyProject.csproj,因为它是 web api,而不是控制台项目。因此,使用 Main() 临时免除自动生成文件且不注释 main() Program.cs 的唯一半决定是<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0"/>
在 MainProject.csproj 中删除并离开
<ItemGroup>
<PackageReference Include="NUnit" Version="3.11.0"/>
<PackageReference Include="NUnit3TestAdapter" Version="3.11.0"/>
...在 Test.csproj 中包含所有三个项目。所以要 dotnet test 和 dotnet run 我需要在 Testsubfolder 中删除 obj 文件夹,或者只删除运行测试后出现的 BooksApi\Tests\obj\Debug \netcoreapp2.2 中的 Tests.Program.cs 文件???怎么做才能完全解决 Main 的自动生成???
解决方案
推荐阅读
- python - 使用字符串值进行数据帧切片
- python - 如何改进/修改特征匹配的参数 - SIFT SURF - Opencv
- java - 我将如何允许它通过每个元素来检查它是否相等?
- python - 使用带有列作为附加索引的 pandas 创建多索引和转置数据
- javascript - Is there a way for me to get more than 1,000 entries from a fetch command in React?
- excel - How Do I Close the Excel Application if I Only Have a Worksheet Reference Returning from a PowerShell Function?
- kotlin - How Can I Clear A Kotlin Error in JavaFX?
- awk - 如何使用 awk 打印头文件,然后将值分隔到 csv 文件中?
- google-cloud-platform - 在服务器上为 GCP Speech to Text 生成 AccessToken 以在 Android/iOS 中使用
- css - 如何在 Google Chrome 的可滚动容器中实现元素的反向堆栈?