Я получаю следующее предупреждение в VS Code при написании модульных тестов с NUnit:
Тип «MyClass» в «MyProject.cs» конфликтует с импортированным типом «MyClass» в «MyProject, версия = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null». Используя тип, определенный в «Myproject \ Tests \ MyClass.cs». (CS0436) [Тесты]
Вот шаги, которые я сделал до сих пор:
Переместился в нужную папку для всех проектов C # (например, E:\MyCSharpProjects
).
Создан новый консольный проект C # с помощью dotnet new console -o MyProject
.
Написал код.
Выполнить следующую команду один раз: dotnet new -i NUnit3.DotNetNew.Template
. Я предполагаю, что это устанавливает шаблоны проектов NUnit.
Создана новая папка внутри корневой папки MyProject
с именем Tests
.
Переместился в новую папку Tests
и выполнил следующие команды:
dotnet new nunit
dotnet add reference ../MyProject.csproj
Установлен пакет NUnit
через NuGet на MyProject.csproj
.
Написал тестовый код.
ПРИМЕЧАНИЕ 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>
ПРИМЕЧАНИЕ 3: Ниже приведен мой файл MyProject.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<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="*"/>
</ItemGroup>
</Project>
ПРИМЕЧАНИЕ 4: Ниже приведен мой файл Tests.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>
Предупреждение начало появляться после того, как я попытался сослаться на класс внутри моего Tests
проекта под названием MyClass
. Этот класс объявлен только внутри моего Tests
проекта и не конфликтует с MyProject
. Я, однако, прочитал, что это может быть вызвано Tests.csproj
ссылкой на MyProject.csproj
, находясь внутри MyProject
.
Мой C # проект имеет следующую структуру:
E:\MyCSharpProjects
MyProject
MyProject.csproj
<MyProject code files>
Tests
Tests.csproj
<Tests code files>
Мои вопросы:
Имеет ли тестовый проект, который ссылается на мой настоящий проект, единственный способ использовать NUnit?
Есть ли способ иметь только 1 проект C #, в котором есть тесты NUnit, аналогично Java и JUnit?
Я держу свой тестовый проект внутри моего реального проекта, чтобы они всегда были вместе. Это стандартная практика? А если нет, то что?
Как мне избавиться от указанного предупреждения? Я не хочу игнорировать это, потому что мне не нравится, когда в моем коде есть предупреждения.
ОБНОВЛЕНИЕ: В случае, если мои вопросы слишком широки, чтобы ответить, ссылка на стандарты о том, как писать тесты NUnit от начала до конца, также будет полезна.
РЕЗЮМЕ: Ответ Десмонда сработал! Оказывается, все, что мне нужно было сделать, это добавить файл .sln
в мой проект, и все работало отлично! Нет предупреждений и нет необходимости вообще отключать генерацию информации о сборке!
Большое спасибо всем, кто помог!