Есть ли способ запускать модульные тесты на .net fiddle?

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

Я хотел бы использовать dotnet fiddle (https://dotnetfiddle.net/), чтобы продемонстрировать поведение через модульные тесты

Fiddle обычно компилируется как консольное приложение, вызываемое с помощью Program.Main

Но тесты обычно выполняются в библиотеке классов, вызываемой с помощью dotnet test

Есть ли способ заставить тесты работать в fiddle?

Пример fiddle (где тесты не работают)

Пример теста

public class CalculatorTests
{
    [Fact]
    public void Add_WhenCalledWithTwoIntegers_ReturnsTheirSum()
    {
        // Подготовка
        var calculator = new Calculator();
        
        // Действие
        var result = calculator.Add(2, 3);

        // Проверка
        Assert.Equal(5, result);
    }

    private class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

Примечание: Кодовые части этого вопроса также могут быть актуальны на StackOverflow, но я специально хочу, чтобы это работало в контексте dotnetfiddle. Код будет работать нормально локально

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

К сожалению, на данный момент DotNet Fiddle не поддерживает запуск модульных тестов в традиционном понимании. Это связано с тем, что сервис создан для работы с консольными приложениями и не предоставляет возможности использовать dotnet test, который обычно применяется для запуска тестов в библиотеках классов. Тем не менее, можно обойти это ограничение с помощью некоторых хитростей, чтобы продемонстрировать поведение тестов, использующих схему модульного тестирования.

Вот несколько шагов, которые могут помочь вам имитировать работу модульных тестов в DotNet Fiddle:

1. Имитация Исходного Тестирования

Вы можете просто создать метод, который будет вызывать ваши тесты и выводить результаты. Например, вместо использования библиотеки Xunit для создания тестов, реализуйте свою собственную логику тестирования:

public class Program
{
    public static void Main()
    {
        // Запускаем "тесты"
        RunTests();
    }

    public static void RunTests()
    {
        if (Add_WhenCalledWithTwoIntegers_ReturnsTheirSum())
        {
            Console.WriteLine("Test Passed!");
        }
        else
        {
            Console.WriteLine("Test Failed!");
        }
    }

    public static bool Add_WhenCalledWithTwoIntegers_ReturnsTheirSum()
    {
        var calculator = new Calculator();
        var result = calculator.Add(2, 3);
        return result == 5; // Здесь мы проверяем условие
    }

    private class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

Этот код создает метод RunTests, который будет вызывать имитацию вашего теста, и по результату возвращает, проходите ли вы тест или нет.

2. Использование Assert Логики

Вы можете создать простую систему утвердительных проверок, которая будет выполнять ту же роль, что и Test Framework. Например:

public static void AssertEqual(int expected, int actual)
{
    if (expected != actual)
    {
        Console.WriteLine($"Test Failed: Expected {expected}, but got {actual}");
    }
    else
    {
        Console.WriteLine("Test Passed!");
    }
}

После этого вызовите этот метод внутри вашего теста:

public static bool Add_WhenCalledWithTwoIntegers_ReturnsTheirSum()
{
    var calculator = new Calculator();
    var result = calculator.Add(2, 3);
    AssertEqual(5, result);
    return result == 5; // Логика остается прежней
}

3. Ограничения

Имейте в виду, что данный подход является лишь имитацией и не будет обеспечивать все возможности реального тестирования, такие как асинхронные тесты, тестовые атрибуты и гибкость настройки. Если управление тестами является критически важным этапом вашего проекта, рекомендуется использовать полноценное тестовое окружение на локальном компьютере или CI/CD-системах, где поддержка .NET Core и его библиотек тестирования происходит более целостно.

Заключение

Хотя DotNet Fiddle не предоставляет встроенных средств для запуска модульных тестов, вы можете создать структуру для тестирования функциональности, используя простой подход и вывод результатов в консоль. Это позволит вам визуализировать поведение ваших методов и проводить тестирование на лету в обучающих или демонстрационных целях.

Если ваша цель – более тщательно протестировать свой код, то лучше всего воспользоваться локальной средой разработки или специализированными инструментами для тестирования.

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

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