Вопрос или проблема
Вот мои тестовые классы:
BaseTest.cs:
using AutoMapper;
using Microsoft.Extensions.Configuration;
using Moq;
using NUnit.Framework;
[TestFixture]
public abstract class BaseTest
{
protected Mock<IPatientRepository> PatientRepositoryMock = new();
protected IConfiguration Configuration = null!;
protected PasswordService PasswordService = null!;
protected Mock<ICurrentUserService> CurrentUserMock = new();
protected Mock<IUserRepository> UserRepositoryMock = new();
protected Mock<IMapper> MapperMock = new();
protected Mock<IPackageRepository> PackageRepositoryMock = new();
[SetUp]
public void Setup()
{
CurrentUserMock = new Mock<ICurrentUserService>();
PackageRepositoryMock = new Mock<IPackageRepository>();
MapperMock = new Mock<IMapper>();
}
[OneTimeSetUp]
public void OneTimeSetup()
{
PasswordService = new PasswordService();
Configuration = ConfigurationsBuilder.Build();
}
}
CreatePackageTests.cs
using Moq;
using NUnit.Framework;
public class CreatePackageTests : PackageTestsBase
{
[Test]
public void CreatePackage_DuplicateName_BadRequestException()
{
// Подготовка
var createPackageDto = new CreatePackageRequest
{
Name = "Базовый пакет"
};
PackageRepositoryMock.Setup(r => r.SaveChangesWithNameValidationAsync()).Throws<BadRequestException>(() =>
throw new BadRequestException("Пакет с таким именем уже существует"));
// Выполнение и проверка
var exception = Assert.ThrowsAsync<BadRequestException>(() => PackageService.CreateAsync(createPackageDto));
Assert.That(exception?.Message, Is.EqualTo("Пакет с таким именем уже существует"));
}
}
Вот результат команды dotnet test
:
Нет доступных тестов в {mydirectory}Application.UnitTests.dll. Убедитесь, что тестовый обнаруживатель и исполнители зарегистрированы, а настройки версии платформы и фреймворка подходят, и попробуйте снова.
Я использую одну и ту же версию dotnet в Rider и в терминале:
Я запускаю тесты, используя Rider, и rider запускает все тесты. Но когда я запускаю через dotnet cli, dotnet cli не находит мой CreatePackageTests
, я думаю, потому что я не добавил атрибут TestFixture
к CreatePackageTests
.
Вопрос: Есть ли способ запустить все тесты, используя dotnet cli?
Можете убедиться, что вы используете одинаковые версии .NET Cli и MBBuild в Rider и в терминале?
Проблема была в NUnit3TestAdapter. Я обновил пакет. Теперь работает!
Ответ или решение
Проблема, с которой вы столкнулись при запуске тестов через командную строку dotnet CLI, связана с отсутствием атрибута [TestFixture]
в вашем классе тестов CreatePackageTests
. Это приводит к тому, что тесты в данном классе не обнаруживаются. Однако, как вы уже заметили, проблема также может быть вызвана неправильной конфигурацией окружения для запуска тестов.
Вот шаги, которые могут помочь вам решить проблему:
-
Добавление атрибута
[TestFixture]
: Убедитесь, что ваш тестовый классCreatePackageTests
имеет атрибут[TestFixture]
. Это позволит NUnit обнаружить этот класс как тестовый набор. Измените ваш класс следующим образом:using Moq; using NUnit.Framework; [TestFixture] // Добавьте этот атрибут public class CreatePackageTests : PackageTestsBase { [Test] public void CreatePackage_DuplicateName_BadRequestException() { // Arrange var createPackageDto = new CreatePackageRequest { Name = "Basic Package" }; PackageRepositoryMock.Setup(r => r.SaveChangesWithNameValidationAsync()) .Throws<BadRequestException>(() => throw new BadRequestException("Package with the same name already exists")); // Act & Assert var exception = Assert.ThrowsAsync<BadRequestException>(() => PackageService.CreateAsync(createPackageDto)); Assert.That(exception?.Message, Is.EqualTo("Package with the same name already exists")); } }
-
Проверка версии NUnit и тестового адаптера: Убедитесь, что у вас установлены последние версии пакетов NUnit и NUnit3TestAdapter. Для этого проверьте файл
*.csproj
вашего проекта на наличие следующих строк:<PackageReference Include="NUnit" Version="3.x.x" /> <PackageReference Include="NUnit3TestAdapter" Version="3.x.x" />
Замените
3.x.x
на актуальные версии пакетов. Чтобы обновить пакеты, вы можете использовать следующую команду в терминале:dotnet add package NUnit dotnet add package NUnit3TestAdapter
-
Проверка среды выполнения: Убедитесь, что среда выполнения и версии .NET CLI одинаковы в Rider и терминале. Вы можете использовать команды
dotnet --version
в терминале и проверить версии в Rider. -
Кэширование и сборка: Иногда проблемы возникают из-за устаревшего кэша. Вы можете попробовать очистить кэш с помощью следующей команды:
dotnet clean dotnet build
-
Запуск тестов: Для запуска всех тестов из терминала используйте следующую команду:
dotnet test
-
Дополнительные выводы: Если все шаги выше не дали результатов и вы по-прежнему не можете запускать тесты, попробуйте запустить команду с дополнительным выводом:
dotnet test --verbosity normal
Это даст более подробную информацию о том, что происходит во время выполнения тестов и может помочь вам в диагностике проблемы.
Следуя этим шагам, вы должны смочь запустить тесты как через Rider, так и через dotnet CLI.