首页 > 解决方案 > 如何在 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 的自动生成???

标签: apiasp.net-corenunit

解决方案


推荐阅读