C# 编写NUnit测试时发生类型冲突
在使用NUnit编写单元测试时,我在VS代码中收到以下警告: “MyProject.cs”中的类型“MyClass”与“MyProject,版本=0.0.0.0,区域性=中性,PublicKeyToken=null”中导入的类型“MyClass”冲突。使用“Myproject\Tests\MyClass.cs”中定义的类型。(CS0436)[测试] 以下是我迄今为止采取的步骤: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
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
软件包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>
我的问题是:
总结:答案有效!事实证明,我所需要做的就是在我的项目中添加一个
.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