Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Иногда так случается, что хочется сменить работу. В таком случае, у нас есть несколько вариантов:
Если Вы все таки выбрали 3й вариант, то Вы поступили, как я. И я получил предложение мечты: родной стек(последнее время, я был вынужден сменить любимый C#, на php, так ещё и bitrix framework), финтех и с прибавкой к зарплате. Конечно же, первый делом, я решил подновить знания. Этот текст — это в первую очередь, моя шпаргалка, составленная с текста вакансии на должность Middle .NET Engineer моей мечты.
Entity framework и NHibernate — это фреймворки, которые используют технологию ORM(объектно-ориентировочного отображения(маппинга)для сопоставления объектов(классов) с таблицами в БД. То есть ORM, условно, прослойка между кодом и базой данных, которая позволяет созданые в программе объекты складывать/получать в/из бд.
Юнит-тесты позволяют быстро и автоматически протестировать отдельные компоненты приложения независимо от остальной его части. Не всегда юнит-тесты могут покрыть весь код приложения, но тем не менее они позволяют существенно уменьшить количество ошибок уже на этапе разработки.
Популярные фрейморки:
Начиная с Visual Studio 2019 специально для тестов были добавлены три типа проектов: xUnit Test Project(.NET Core), MSTest Test Project(.NET Core) и NUnit Test Project(.NET Core)
Я буду рассматривать xUnit
Тесты в xUnit определяются в виде методов, к которым применяются атрибуты Fact, Theory.
Fact- это отдельный тест, у которого нет параметров. Theory — тест, принимающий параметры, может иметь несколько сценариев.
Существует целая парадиграма тестирования, которую xUnit реализует в полной мере: Arrange-Act-Assert.
Arrange и Act — это обычный код на C#, а Assert — это отдельный класс с набором статических методов для проверки результатов.
Таким образом, мы прошли 2 из 7 пунктов резюме.
В следующей части:
• DI frameworks
• Application designs understanding (n-Tier, Onion).
Спасибо, что дочитали, таким образом, я понимаю, что не один я готовлюсь к чему-либо ;)
Материалы: раз, два, три
- 1) Потребовать прибавки, чтобы получить дополнительную мотивацию работать
- 2) Потребовать отпуск, чтобы отдохнуть от надоевших задач и набраться сил.
- 3) Сменить работу, выложив резюме, в надежде, что Вы получите предложение, которое будет Вас удовлетворять.
Если Вы все таки выбрали 3й вариант, то Вы поступили, как я. И я получил предложение мечты: родной стек(последнее время, я был вынужден сменить любимый C#, на php, так ещё и bitrix framework), финтех и с прибавкой к зарплате. Конечно же, первый делом, я решил подновить знания. Этот текст — это в первую очередь, моя шпаргалка, составленная с текста вакансии на должность Middle .NET Engineer моей мечты.
ORM — Entity Framework / NHibernate
Entity framework и NHibernate — это фреймворки, которые используют технологию ORM(объектно-ориентировочного отображения(маппинга)для сопоставления объектов(классов) с таблицами в БД. То есть ORM, условно, прослойка между кодом и базой данных, которая позволяет созданые в программе объекты складывать/получать в/из бд.
Плюсы EF
- Позволяет создать таблицу кодом или же используя EF Designer и сгенерировать новую базу данных
- Вы можете «автоматизировать» создание объектов, а так же отслеживать изменения этих объектов, чем упростить процес обновления базы данных
- Использование единого синтаксиса(LINQ) для любых коллекций объектов, будь то данные из БД, или просто список; он достаточно быстр, при правильном использовании, а так же в меру лаконичен.
- EF может заменить огромные куски кода, которые Вы бы писали самостоятельно.
- Сокращает время разработки.
- Поддерживает асинхронные операции с базами данных.
Минусы EF
- Использование «нетрадиционного» подхода обработки данных, доступного не с каждой базой данных.
- При любом изменении в схеме БД, EF откажется работать; потребуются изменения в коде.
- SQL-код генерируются в некотролируемом виде, мы должны доверять разработчикам самого EF.
- Слабо подходит для больших доменных моделей.
Плюсы NHibernate
- Большие возможности маппинга.
- Поддержка кэша второго уровня.
- Отличная реализация Unit Of Work.
- Вы можете использовать почти любую базу данных.
- Очень популярный в корпоративной среде.
- Поддерживает различные стратегии генерации идентификаторов из базы данных.
Минусы NHibernate
- Большое время подготовки метаданных.
- Написание сопоставления, может быть очень утомительным, ведь XML — не самый дружелюбный язык.
- Сложен в освоении, так как сложен сам процес поиска документации.
Writing unit tests frameworks
Юнит-тесты позволяют быстро и автоматически протестировать отдельные компоненты приложения независимо от остальной его части. Не всегда юнит-тесты могут покрыть весь код приложения, но тем не менее они позволяют существенно уменьшить количество ошибок уже на этапе разработки.
Популярные фрейморки:
- xUnit.net
- MS Test
- NUnit
Я буду рассматривать xUnit
Тесты в xUnit определяются в виде методов, к которым применяются атрибуты Fact, Theory.
Fact- это отдельный тест, у которого нет параметров. Theory — тест, принимающий параметры, может иметь несколько сценариев.
Пример
[Fact]
public void Should_do_somthing(){...}
[Theory]
[InlineData(20, 180, 80, ”good”)]
[InlineData(20, 180, 50, ”bad”)]
public void Should_measure_weight(int age, int height, decimal weight, string expected){...}
Существует целая парадиграма тестирования, которую xUnit реализует в полной мере: Arrange-Act-Assert.
- Arrange: устанавливает начальные условия для выполнения теста
- Act: выполняет тест (обычно представляет одну строку кода)
- Assert: верифицирует результат теста
Arrange и Act — это обычный код на C#, а Assert — это отдельный класс с набором статических методов для проверки результатов.
Основные методы
- All(collection, action): метод подтверждает, что все элементы коллекции collection соответствуют действию action
- Contains(expectedSubString, actualString): метод подтверждает, что строка actualString содержит expectedSubString
- DoesNotContain(expectedSubString, actualString): метод подтверждает, что строка actualString не содержит строку expectedSubString
- DoesNotMatch(expectedRegexPattern, actualString): метод подтверждает, что строка actualString не соответствует регулярному выражению expectedRegexPattern
- Matches(expectedRegexPattern, actualString): метод подтверждает, что строка actualString соответствует регулярному выражению expectedRegexPattern
- Equal(expected, result): метод сравнивает результат теста в виде значения result и ожидаемое значение expected и подтверждает их равенство
- NotEqual(expected, result): метод сравнивает результат теста в виде значения result и ожидаемое значение expected и подтверждает их неравенство
- Empty(collection): метод подтверждает, что коллекция collection пустая
- NotEmpty(collection): метод подтверждает, что коллекция collection не пустая
- True(result): метод подтверждает, что результат теста равен true
- False(result): метод подтверждает, что результат теста равен false
- IsType(expected, result): метод подтверждает, что результат теста имеет тип expected
- IsNotType(expected, result): метод подтверждает, что результат теста не представляет тип expected
- IsNull(result): метод подтверждает, что результат теста имеет значение null
- IsNotNull(result): метод подтверждает, что результат теста не равен null
- InRange(result, low, high): метод подтверждает, что результат теста находится в диапазоне между low и high
- NotInRange(result, low, high): метод подтверждает, что результат теста не принадлежит диапазону от low до high
- Same(expected, actual): метод подтверждает, что ссылки expected и actual указывают на один и тот же объект в памяти
- NotSame(expected, actual): метод подтверждает, что ссылки expected и actual указывают на разные объекты в памяти
- Throws(exception, expression): метод подтверждает, что выражение expression генерирует исключение exception
Таким образом, мы прошли 2 из 7 пунктов резюме.
В следующей части:
• DI frameworks
• Application designs understanding (n-Tier, Onion).
Спасибо, что дочитали, таким образом, я понимаю, что не один я готовлюсь к чему-либо ;)
Материалы: раз, два, три