Вопрос или проблема
Я хотел бы использовать 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 не предоставляет встроенных средств для запуска модульных тестов, вы можете создать структуру для тестирования функциональности, используя простой подход и вывод результатов в консоль. Это позволит вам визуализировать поведение ваших методов и проводить тестирование на лету в обучающих или демонстрационных целях.
Если ваша цель – более тщательно протестировать свой код, то лучше всего воспользоваться локальной средой разработки или специализированными инструментами для тестирования.