NUnit TestFixture только в классе BaseTest запуск через dotnet cli

Вопрос или проблема

Вот мои тестовые классы:

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

терминал:
терминал: путь dotnet

Я запускаю тесты, используя Rider, и rider запускает все тесты. Но когда я запускаю через dotnet cli, dotnet cli не находит мой CreatePackageTests, я думаю, потому что я не добавил атрибут TestFixture к CreatePackageTests.

Вопрос: Есть ли способ запустить все тесты, используя dotnet cli?

Можете убедиться, что вы используете одинаковые версии .NET Cli и MBBuild в Rider и в терминале?

Проблема была в NUnit3TestAdapter. Я обновил пакет. Теперь работает!

Ответ или решение

Проблема, с которой вы столкнулись при запуске тестов через командную строку dotnet CLI, связана с отсутствием атрибута [TestFixture] в вашем классе тестов CreatePackageTests. Это приводит к тому, что тесты в данном классе не обнаруживаются. Однако, как вы уже заметили, проблема также может быть вызвана неправильной конфигурацией окружения для запуска тестов.

Вот шаги, которые могут помочь вам решить проблему:

  1. Добавление атрибута [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"));
        }
    }
  2. Проверка версии 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
  3. Проверка среды выполнения: Убедитесь, что среда выполнения и версии .NET CLI одинаковы в Rider и терминале. Вы можете использовать команды dotnet --version в терминале и проверить версии в Rider.

  4. Кэширование и сборка: Иногда проблемы возникают из-за устаревшего кэша. Вы можете попробовать очистить кэш с помощью следующей команды:

    dotnet clean
    dotnet build
  5. Запуск тестов: Для запуска всех тестов из терминала используйте следующую команду:

    dotnet test
  6. Дополнительные выводы: Если все шаги выше не дали результатов и вы по-прежнему не можете запускать тесты, попробуйте запустить команду с дополнительным выводом:

    dotnet test --verbosity normal

Это даст более подробную информацию о том, что происходит во время выполнения тестов и может помочь вам в диагностике проблемы.

Следуя этим шагам, вы должны смочь запустить тесты как через Rider, так и через dotnet CLI.

Оцените материал
Добавить комментарий

Капча загружается...