C# Visual Studio запускает модульные тесты условно

Мне нужно провести модульное тестирование некоторых функций библиотеки, включающих связь SSH с серверами Linux и Windows.

У меня есть файл test_config.json, предоставленный пользователем. Эта конфигурация в основном содержит два свойства:

public ServerConfig? TestServerLinux { get; set; }
public ServerConfig? TestServerWindows { get; set; }

И вот проблема, с которой я столкнулся: эти тесты будут запускаться только локально, а не в каком-либо конвейере, и поскольку этот тестовый сервер Windows является реальной машиной, Linux, вероятно, будет запущен как Docker-контейнер на машине разработчика.

Все мои тестовые классы будут разделены на Windows и Linux или будут содержать отдельные методы тестирования для Windows и Linux. Я хочу, чтобы тест для каждого запускался условно, только если конфигурация этого сервера заполнена.

Таким образом, если конфигурация сервера Windows равна нулю, все TestClasses (или TestMethods) для Windows не следует запускать.

Возможно ли что-то подобное, используя Microsoft.VisualStudio.TestTools.UnitTesting, у нас есть все тесты, написанные для этого фреймворка, поэтому я не хочу вводить еще один?

Кажется, есть более общий вопрос, на основе которого вы могли бы построить: stackoverflow.com/questions/53338872/…

Zdeněk Jelínek 17.04.2024 11:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из ответа: Как пропустить модульный тест во время выполнения?

Вы можете расширить TestMethodAttribute. Выберите метод для запуска на основе имени или прочитайте файл конфигурации, а затем верните true или false.

public class TestMethodForConfigAttribute : TestMethodAttribute
{
    public string Name { get; set; }

    public TestMethodForConfigAttribute(string name)
    {
        Name = name;
    }

    public override TestResult[] Execute(ITestMethod testMethod)
    {
        if (IsConfigEnabled(Name))
        {
            return base.Execute(testMethod);
        }
        else
        {
            return new TestResult[] { new TestResult { Outcome = UnitTestOutcome.Inconclusive } };
        }
    }

    public static bool IsConfigEnabled(string name)
    {
     if (name == "Windows")
     return true;
     else
     return false;
    }
}

Метод испытания

[TestClass]
public class UnitTest1
{
    [TestMethodForConfig("Windows")]
    public void MyTest()
    {
        //...
    }
}

Проголосуйте за ответ. Просто интересно, можете ли вы сделать его «чище», используя существующий словарь/поиск вместо «магических строк». (альтернативный конструктор) public TestMethodForConfigAttribute(System.Runtime.InteropServices.‌​OSPlatform targetOs) {this. /* йада йада йада */} на основе этих ::: using System.Runtime.InteropServices; bool IsWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); /**/ bool IsMacOS = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); /**/ bool IsLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); /**/

granadaCoder 17.04.2024 14:05

Или иметь один атрибут для Windows и один для Linux.

Zdeněk Jelínek 17.04.2024 14:56

Другие вопросы по теме

Я получаю сообщение об ошибке CS0104. «Утверждение» — это неоднозначная ссылка между «NUnit.Framework.Assert» и «Microsoft.VisualStudio.TestTools.UnitTesting.Assert»
Как удалить профиль очистки кода в Visual Studio Professional 2022
Как установить правила форматирования для оператора распространения C# в Visual Studio?
Попытка импортировать и использовать метод из другого проекта в многопроектном решении Visual Studio
Недавно созданный проект Blazor в Visual Studio не собирается
Отладчик VisualStudio, использующий более старую версию исходных файлов
Семантический анализатор Roslyn C# для проверки правильности именования при сборке, но ошибок в Intellisense в конкретных случаях
Извлечение блока в код больше не доступно в .NET 8 и Visual Studio 2022
Ошибка сборки Visual Studio: операцию не удалось завершить. Не удалось найти параметры соответствия времени выполнения симулятора
Измените несколько классов на частичные классы в Visual Studio