Skip to content

Byndyusoft/byndyusoft-dotnet-test-infrastructure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Byndyusoft.DotNet.Testing.Infrastructure

Проект содержит вспомогательные объекты для использования в автоматических тестах.

Содержание:


Создание тестовых сценариев интеграционных тестов

Необходимо создать вспомогательные классы для класса тестового сценария

    public class TestCaseParameters
    {
        ///Класс со всеми входными параметрами
    }

    public class TestCaseMocks
    {
        ///Класс с необходимыми результатами моков
    }

    public class TestCaseExpectations
    {
        ///Класс с необходимыми ожидаемыми результатами (строка в БД, сообщения в очередях, вызовы апи)
    }

Затем необходимо создать сам класс тестового сценария

    public class TestCaseItem : TestCaseItemBase
    {
        /// <summary>
        ///     Название папки, где находится файл для обработки
        /// </summary>
        public string TestCaseFolder { get; set; }

        /// <summary>
        ///     Входные параметры
        /// </summary>
        public TestCaseParameters Parameters { get; set; }

        /// <summary>
        ///     Настройки моков для тестов
        /// </summary>
        public TestCaseMocks Mocks { get; set; }

        /// <summary>
        ///     Объект с ожидаемыми значениями, которые проверяются в тест-кейсе
        /// </summary>
        public TestCaseExpectations Expected { get; set; }
    }
    

Теперь мы готовы заводить сами данные тестовых сценариев

public class BankStatementDocumentTestCase : ITestCaseData<TestCaseItem>
 {
     public TestCaseItem Get()
     {        
         return new TestCaseItem
                    {
                        TestId = "BankStatementDocument",
                        Description = @"BankStatementDocument",
                        TestCaseFolder = "BankStatementDocument",
                        Mocks = new TestCaseMocks
                                    {
                                        ///Данные моков
                                    },
                        Parameters = new TestCaseParameters
                                         {
                                             ///Входные данные
                                         },
                        Expected = new TestCaseExpectations
                                       {
                                           //Ожидаемые значения
                                       }
                    };
     }

После подготовки всех необходимых данныех создаем тест-теорию

     [Theory]
     [TestCaseData(typeof(BankStatementDocumentTestCase))]
     [TestCaseData(typeof(FormalizedXbrlDocumentTestCase))]
     [TestCaseData(typeof(FormalizedDepositoryDocumentTestCase))]
     public async Task ProcessQueueMessage_FileAndServiceSettings_AllArtifactsAreCorrect(TestCaseItem testCase)
     {
         _output.WriteLine(testCase.ToStringDescription());

         ///Основная логика теста
     }

Генератор отчёта по тест-кейсам

Назначение: Формирование отчёта по всем тест-кейсам в проекте.
Формат: Отчёт форимруется в markdown-формате.
Расположение: Корневая директория решения.
Название файла: README_TestCases.md

Все тест-кейсы группируются по категориям/подкатегориям, если они указаны для тест-кейсов.
В отчёте указано общее количество тест-кейсов, а также для каждой категории/подкатегории.

Для тест-кейса отображается следующая информация:

  • TestId - Идентификатор тест-кейса.
  • TestClass - Название класса тест-кейса.
  • TestMethods - Тестовые методы, в которых используется класс тест-кейса.
  • Description - Описание тест-кейса. Из описания берётся первая непустая строка, которая используется в качестве названия тест-кейса.

Условные обозначения для наименования тест-кейсов:
(А) - Авто-тест. Тест-кейс автоматизирован (для тест-кейса есть тестовый метод)
(Р) - Ручной тест. Тест-кейс не автоматизирован (для тест-кейса нет тестового метода)

Требования к тест-кейсам:
Для того, чтобы тест-кейсы попадали в отчёт, они должны быть оформлены в виде классов, унаследованных от базового класса тест-кейсов TestCaseItemBase и создаваться через публичный метод Get() без параметров в отдельном классе.

public class TestCaseItem : TestCaseItemBase
{

}

public class SomeTestCase1
{
    public TestCaseItem Get()
    {
        return new TestCaseItem
        {
            TestId = "TestId1",
            Description = @"

TestName1

Description of test-case 1  
bla-bla
",
            Category = "CategorySomeFeature",
            SubCategory = "SubCategorySomeScenarios"
        };
    }
}

Inline тест кейсы

Генератор также сможет добавить в документацию заинлайненные тест кейсы. Такие тест кейсы создаются прямо в коде теста через конструкцию new и инициализатор свойств:

[Fact]
public async Task Some_Important_Test()
{
    // ARRANGE
    var testId = "TestId1"
    var testCase = new TestCaseItem
    {
        TestId = testId,
        Description = @"
TestName1

Description of test-case 1  
bla-bla
",
         Category = "CategorySomeFeature",
         SubCategory = "SubCategorySomeScenarios"
     }

    // ACT
        // что-то происходит

    // ASSERT
        // что-то проверяется
}

Инициализировать свойства тест-кейса, значимых для отчёта, можно в том числе через локальные переменные, как показано в примере.

Пример использования генератора:

Для создания отчёта установите в проекте пакет Byndyusoft.DotNet.Testing.Infrastructure и создайте модульный тест примерно следующего содержания:

[Fact]
public async Task AddReport_FromCurrentDomain_ShouldAddReadmeInSolutionRoot()
{
    // ARRANGE
    var reporter = TestCaseReadmeSolutionReporter.New();

    // ACT
    var reportConsistency = await reporter.AddReport(Assembly.GetExecutingAssembly());

    // ASSERT
    reportConsistency.Should().Be(ReportConsistency.Consistent);
}

После успешного выполнения данного теста в корневой директории решения должен находиться файл отчёта README_TestCases.md.

Настройка отчёта с помощью шаблона

Генератор отчётов позволяет настроаивать содержимое отчета с помощью файла-шаблона. Шаблон представляет собой md-файл с текстом в формате markdown.
Шаблон может содержать Название - в заголовке первого уровня (#).
После Названия можно укзать произвольный markdown-текст, который будет выведен сразу после содержания отчета в разделе Описание.
Также в шаблоне можно задать порядок сортировки и описание для Категорий/подкатегорий тест-кейсов.

Пример файла-шаблона:

Указанные в шаблоне категории будут идти в заданном порядке, а все остальные отсортированы по алфавиту.

# Тест-кейсы
---
**Условные обозначения:**  
TODO  
**Примечания:**  
TODO  
---

## CategorySomeFeature
Важная фича

### SubCategorySomeScenarios
Сценарии важной фичи

## CategoryAnotherFeature
Другая важная фича

### Какая-то подкатегория
Сценарии другой важной фичи

Пример генерации отчёта, с использованием шаблона:

[Fact]
public async Task Generate_FromCurrentDomain_WithTemplate_ShouldGenerateReadmeInSolutionRoot()
{
    // ARRANGE
    // Настройки генератора отчёта
    var options = new TestCaseMarkdownReportingOptions
    {
        // Путь к файлу шаблона
        TemplatePath = Path.Combine("ReadmeGeneration", "TestCases", "WithTemplate", "README_TestCases_Template.md")
    };

    // В качестве параметра передаётся объект настроек где указан путь к шаблону
    var reporter = TestCaseReadmeSolutionReporter.New(options);

    // ACT
    var reportConsistency = await reporter.AddReport(Assembly.GetExecutingAssembly());

    // ASSERT
    reportConsistency.Should().Be(ReportConsistency.Consistent);
}

Ошибки формирования отчёта

Если во время формирования отчёта произошли ошибки, например, ошибки валидации тест-кейсов (не заполнены ИД или описание, данные дублируются для разных тестов и т.п.), то в отчёте ошибки будут выведены в секции Ошибки формирования readme.

Примеры

Примеры генерации отчёта по тест кейсам можно найти в проекте с тестами в текущем решении - TestCaseReadmeSolutionReporterTests
Пример сгенерированного отчёта - README_TestCases.md

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages