C# 编写NUnit测试时发生类型冲突

C# 编写NUnit测试时发生类型冲突,c#,nunit,warnings,C#,Nunit,Warnings,在使用NUnit编写单元测试时,我在VS代码中收到以下警告: “MyProject.cs”中的类型“MyClass”与“MyProject,版本=0.0.0.0,区域性=中性,PublicKeyToken=null”中导入的类型“MyClass”冲突。使用“Myproject\Tests\MyClass.cs”中定义的类型。(CS0436)[测试] 以下是我迄今为止采取的步骤: 导航到所有C#项目所需的文件夹(例如e:\MyCSharpProjects) 通过dotnetnewconsole-o

在使用NUnit编写单元测试时,我在VS代码中收到以下警告:

“MyProject.cs”中的类型“MyClass”与“MyProject,版本=0.0.0.0,区域性=中性,PublicKeyToken=null”中导入的类型“MyClass”冲突。使用“Myproject\Tests\MyClass.cs”中定义的类型。(CS0436)[测试]

以下是我迄今为止采取的步骤:

  • 导航到所有C#项目所需的文件夹(例如
    e:\MyCSharpProjects

  • 通过
    dotnetnewconsole-omyproject
    创建了一个新的C#Console项目

  • 写了一些代码

  • 运行以下命令一次:
    dotnet new-i NUnit3.DotNetNew.Template
    。我假设这会安装NUnit项目模板

  • MyProject
    的根文件夹中创建了一个名为
    Tests
    的新文件夹

  • 导航到新的
    Tests
    文件夹并运行以下命令:

    dotnet新nunit

    dotnet添加参考../MyProject.csproj

  • 通过
    MyProject.csproj
    上的NuGet安装了
    NUnit
    软件包

  • 写了一些测试代码

  • 注1:对于
    MyProject.csproj
    Tests.csproj
    ,我将
    TargetFramework
    设置为
    netcoreapp2.2
    ,因为我现在还不想使用3.0

    注意2:为了避免生成错误,我通过在
    PropertyGroup
    下向两个.csproj文件中添加以下条目来停止生成程序集信息:

    <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>    
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>    
    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>        
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>    
    <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
    <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
    
    我的问题是:

  • 拥有一个引用我实际项目的测试项目是使用NUnit的唯一方法吗

  • 有没有一种方法可以让一个C#项目只包含NUnit测试,类似于Java和JUnit

  • 我把我的测试项目放在我的实际项目中,这样它们总是在一起。这是标准做法吗?如果不是,是什么

  • 我如何摆脱上述警告?我不想忽略它,因为我不喜欢在代码中出现警告

  • 更新:如果我的问题太广泛而无法回答,那么关于如何自始至终编写NUnit测试的标准链接也会很有用


    总结:答案有效!事实证明,我所需要做的就是在我的项目中添加一个
    .sln
    文件,一切都很顺利!没有警告,并且根本不需要禁用程序集信息生成

    非常感谢所有帮助过我的人

    请参阅.NET核心指南。他们提出了如下目录结构:

    /unit-testing-using-nunit
        unit-testing-using-nunit.sln
        /PrimeService
            Source Files
            PrimeService.csproj
        /PrimeService.Tests
            Test Source Files
            PrimeService.Tests.csproj
    
    这通常也是我在所有项目中使用的


    关于警告,听起来您在两个项目中定义了相同的类和命名空间。名称空间通常应该镜像目录结构,因此,如果您有一个名为MyProject的项目、一个名为MyProject.Tests的测试项目和一个名为MyClass的类,我希望找到完全限定的名称
    MyProject.MyClass
    MyProject.Tests.MyClass
    。更好的方法是调用test类
    MyClassTests
    或类似的东西。

    1。你还想如何测试你没有参考的东西?2.这完全取决于您自己的实现。如果需要,可以将所有内容写入单个程序集中。3.太基于观点了。我不推荐它,很难。4.不知道。说了这些,你的问题就太宽泛了。事实上,我的测试代码已经反映了目录结构(MyProject.Tests等等),这就是为什么警告特别令人费解的原因。我感觉您没有收到任何警告的原因是您在VS Studio中使用了
    .sln
    ,而不是在VS代码中有多个
    .csproj
    文件。也许VS代码毕竟不适合C#开发?这次我将尝试按照您提供的链接上的说明创建一个.sln文件。希望这能让警告消失。:)嘿,成功了!结果证明我的思路是正确的——我只是缺少一个合适的
    .sln
    文件来保存我的
    .csproj
    文件。非常感谢你的链接!
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <IsPackable>false</IsPackable>
        <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>    
        <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>    
        <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>        
        <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
        <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>    
        <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
        <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="nunit" Version="*" />
        <PackageReference Include="NUnit3TestAdapter" Version="*" />
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="*" />
      </ItemGroup>
    
      <ItemGroup>    
        <ProjectReference Include="..\StudentService.csproj" />
      </ItemGroup>
    
    </Project>
    
    E:\MyCSharpProjects
        MyProject
            MyProject.csproj
            <MyProject code files>
            Tests
                Tests.csproj
                <Tests code files>
    
    /unit-testing-using-nunit
        unit-testing-using-nunit.sln
        /PrimeService
            Source Files
            PrimeService.csproj
        /PrimeService.Tests
            Test Source Files
            PrimeService.Tests.csproj