LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 293 294 295 296 297 298 299 300 301 ... 407
    Перейти на страницу:
    по имени EnsureAutoLotDatabaseTestFixture.cs и реализуйте интерфейс IDisposable. Сделайте класс открытым и запечатанным, а также добавьте показанные далее операторы using:

    using System;

    using AutoLot.Dal.Initialization;

    namespace AutoLot.Dal.Tests.Base

    {

      public sealed class EnsureAutoLotDatabaseTestFixture : IDisposable

      {

      }

    }

    В конструкторе понадобится создать экземпляр реализации IConfiguration и с его помощью создать экземпляр ApplicationDbContext. Затем нужно вызвать метод ClearAndReseedDatabase() класса SampleDatalnitializer и в заключение освободить экземпляр контекста. В приводимых здесь примерах метод Dispose() не обязан выполнять какую-то работу (но должен присутствовать для соответствия шаблону с интерфейсом IDisposable). Вот как выглядит конструктор и метод Dispose():

    public EnsureAutoLotDatabaseTestFixture()

    {

      var configuration =  TestHelpers.GetConfiguration();

      var context = TestHelpers.GetContext(configuration);

      SampleDataInitializer.ClearAndReseedDatabase(context);

      context.Dispose();

    }

    public void Dispose()

    {

    }

    Добавление классов интеграционных тестов

    Теперь необходимо создать классы, которые будут поддерживать автоматизированные тесты. Такие классы называют тестовыми оснастками. Добавьте в проект AutoLot.Dal. Tests новый каталог по имени IntegrationTests и поместите в него четыре файла с именами CarTests.cs, CustomerTests.cs, MakeTests.cs и OrderTests.cs.

    В зависимости от возможностей средства запуска тестов тесты xUnit выполняются последовательно внутри тестовой оснастки (класса), но параллельно во всех тестовых оснастках (классах). Это может оказаться проблематичным при прогоне интеграционных тестов, взаимодействующих с единственной базой данных. Выполнение можно сделать последовательным для всех тестовых оснасток, добавив их в одну и ту же тестовую коллекцию. Тестовые коллекции определяются по имени с применением атрибута [Collection] к классу. Поместите перед всеми четырьмя классами следующий атрибут [Collection]:

    [Collection("Integration Tests")]

    Унаследуйте все четыре класса от BaseTest, реализуйте интерфейс IClassFixture и приведите операторы using к показанному далее виду:

    // CarTests.cs

    using System.Collections.Generic;

    using System.Linq;

    using AutoLot.Dal.Exceptions;

    using AutoLot.Dal.Repos;

    using AutoLot.Dal.Tests.Base;

    using AutoLot.Models.Entities;

    using Microsoft.EntityFrameworkCore;

    using Microsoft.EntityFrameworkCore.ChangeTracking;

    using Microsoft.EntityFrameworkCore.Query;

    using Microsoft.EntityFrameworkCore.Storage;

    using Xunit;

    namespace AutoLot.Dal.Tests.IntegrationTests

    {

      [Collection("Integation Tests")]

      public class CarTests : BaseTest,

        IClassFixture<EnsureAutoLotDatabaseTestFixture>

      {

      }

    }

    // CustomerTests.cs

    using System.Collections.Generic;

    using System;

    using System.Linq;

    using System.Linq.Expressions;

    using AutoLot.Dal.Tests.Base;

    using AutoLot.Models.Entities;

    using Microsoft.EntityFrameworkCore;

    using Xunit;

    namespace AutoLot.Dal.Tests.IntegrationTests

    {

      [Collection("Integation Tests")]

      public class CustomerTests : BaseTest,

        IClassFixture<EnsureAutoLotDatabaseTestFixture>

      {

      }

    }

    // MakeTests.cs

    using System.Linq;

    using AutoLot.Dal.Repos;

    using AutoLot.Dal.Repos.Interfaces;

    using AutoLot.Dal.Tests.Base;

    using AutoLot.Models.Entities;

    using Microsoft.EntityFrameworkCore;

    using Microsoft.EntityFrameworkCore.ChangeTracking;

    using Xunit;

    namespace AutoLot.Dal.Tests.IntegrationTests

    {

      [Collection("Integation Tests")]

      public class MakeTests : BaseTest,

        IClassFixture<EnsureAutoLotDatabaseTestFixture>

      {

      }

    }

    // OrderTests.cs

    using System.Linq;

    using AutoLot.Dal.Repos;

    using AutoLot.Dal.Repos.Interfaces;

    using AutoLot.Dal.Tests.Base;

    using Microsoft.EntityFrameworkCore;

    using Xunit;

    namespace AutoLot.Dal.Tests.IntegrationTests

    {

      [Collection("Integation Tests")]

      public class OrderTests : BaseTest,

        IClassFixture<EnsureAutoLotDatabaseTestFixture>

      {

      }

    }

    Добавьте в класс MakeTests конструктор, который создает экземпляр MakeRepo и присваивает его закрытой переменной readonly уровня класса. Переопределите метод Dispose() и освободите в нем экземпляр MakeRepo:

    [Collection("Integration Tests")]

    public class MakeTests : BaseTest,

      IClassFixture<EnsureAutoLotDatabaseTestFixture>

    {

      private readonly IMakeRepo _repo;

      public MakeTests()

      {

        _repo = new MakeRepo(Context);

      }

      public override void Dispose()

      {

        _repo.Dispose();

      }

      ...

    }

    Повторите те же действия для класса OrderTests, но с использованием OrderRepo вместо MakeRepo:

    [Collection("Integration Tests")]

    public class OrderTests : BaseTest,

      IClassFixture<EnsureAutoLotDatabaseTestFixture>

    {

      private readonly IOrderRepo _repo;

      public OrderTests()

      {

        _repo = new OrderRepo(Context);

      }

      public override void Dispose()

      {

        _repo.Dispose();

      }

      ...

    }

    Тестовые методы [Fact] и [Theory]

    Тестовые методы без параметров называются фактами (и задействуют атрибут [Fact]). Тестовые методы, которые принимают параметры, называются теориями (они используют атрибут [Theory]) и могут выполнять множество итераций с разными значениями, передаваемыми в качестве параметров. Чтобы взглянуть на такие виды тестов, создайте в проекте AutoLot.Dal.Tests новый файл класса по имени SampleTests.cs. Вот как выглядит оператор using:

    using Xunit;

    namespace AutoLot.Dal.Tests

    {

      public class SampleTests

      {

      }

    }

    Начните с создания теста [Fact]. В тесте [Fact] все значения содержатся внутри тестового метода. Следующий простой пример проверяет, что 3 + 2 = 5:

    [Fact]

    public void SimpleFactTest()

    {

      Assert.Equal(5,3+2);

    }

    Что касается теста [Theory], то значения передаются тестовому методу и могут поступать из атрибута [InlineData], методов или классов. Здесь будет использоваться только атрибут [InlineData]. Создайте показанный ниже тест, которому предоставляются разные слагаемые и ожидаемый результат:

    [Theory]

    [InlineData(3,2,5)]

    [InlineData(1,-1,0)]

    public void SimpleTheoryTest(int addend1, int addend2, int expectedResult)

    {

      Assert.Equal(expectedResult,addend1+addend2);

    }

    На заметку! За дополнительными сведениями об инфраструктуре тестирования xUnit обращайтесь в документацию по ссылке https://xunit.net/.

    Выполнение тестов

    Хотя тесты xUnit можно запускать из командной строки (с применением dotnet test), разработчикам лучше использовать для этого Visual Studio. Выберите в меню Test (Тестирование) пункт Test Explorer (Проводник тестов), чтобы получить возможность прогонять и отлаживать все или выбранные тесты.

    Запрашивание базы данных

    Вспомните, что создание экземпляров сущностей из базы данных обычно предусматривает выполнение оператора LINQ в отношении свойств DbSet<T>. Поставщик баз данных и механизм трансляции LINQ преобразуют операторы LINQ в запросы SQL, с помощью которых из базы данных читаются соответствующие данные. Данные можно также загружать посредством метода FromSqlRaw()

    1 ... 293 294 295 296 297 298 299 300 301 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки