Что следует учитывать при выборе основы для насмешек. Net

Include будет выполнять только активную нагрузку, это не обязательно при выполнении операции Select. Из того, что я вижу, код, который вы предоставили, даже не должен компилироваться, если вы пытаетесь загрузить Parameter и ProductParameter из сущности Product, и у этой сущности нет ни одной из этих ссылок.

Первое, на что нужно обратить внимание - это отношения между вашими сущностями. Глядя на вашу объектную модель, вы видите, что между Product и ProductType есть много к 1, а затем много ко многим между Product и Parameter, чему способствует таблица ProductParameter. Существует также набор параметров для ProductType, который я был бы довольно подозрительным. При работе со связями я рекомендую использовать однонаправленные ссылки по умолчанию и включать двунаправленную ссылку, только если это необходимо. Например, для продукта требуется ссылка на тип продукта, однако действительно ли тип продукта требует ссылки на все продукты этого типа? (мы все еще можем получить это, если нам это нужно, сделав запрос в Product). С меньшим количеством двунаправленных ссылок легче работать.

Чтобы получить DTO вашего продукта, вам нужно будет указать, представляет ли DTO продукт (с его параметрами) или комбинацию одного продукта и параметра. Один продукт имеет несколько параметров, поэтому, если DTO представляет один продукт, DTO должен будет обрабатывать набор параметров. Если DTO представляет комбинацию продукта и параметра, то продукт с 3 связанными параметрами приведет к созданию 3x DTO.

Для этого второго случая, учитывая структуру DTO, которая у вас есть в данный момент, вы бы посмотрели на запрос Linq, который выглядит примерно так:

   var items = await _context.Products
        .SelectMany(p => p.ProductParameters)
        .Select(pp => new ProductDTO
         {
           ProductId = pp.ProductId,
           Number = pp.Product.Number,
           Amount = pp.Product.Amount,
           PrimeCostEUR = pp.Product.PrimeCostEUR,
           NameType = pp.Product.ProductType.NameType,
           ProductTypeId = pp.Product.ProductTypeId,
           Name = pp.Parameter.Name,
           Value = pp.Value
         })
          .Where(pp => pp.Product.ProductTypeId == 1)
          .ToListAsync();
    return items;

Запрос будет выполняться для ProductParameters для получения доступа к продукту и каждый из параметров, а также значение параметра продукта.

33
задан LightCC 6 August 2017 в 01:21
поделиться

5 ответов

Поэтому, что вопросы должны я, спрашивая о проекте и мне, чтобы помочь выбрать лучшую платформу насмешки для использования в данном случае?

вопросы, которые необходимо спрашивать о проекте: проект был разработан с ТВЕРДЫМИ принципами, или нет? Действительно ли это - проект, который имеет слабую связь и высокую связность? Хорошие принципы OO были использованы в разрабатывании проекта? Контейнер Внедрения зависимости использует? Система была кодирована в Дизайне метода Контракта (использующий Интерфейсы полностью)?

, Если Вы отвечаете на да на эти вопросы, тогда можно использовать платформу насмешки как RhinoMocks, который является тем, что некоторые назвали бы "самоуверенной" платформой. RhinoMocks и некоторые другие платформы насмешки, имеют очень твердые мнения о том, как система должна быть разработана для объектов, которые будут дразнить. Платформа как RhinoMocks ожидает, что Ваш проект будет разработан определенный путь. Насмешка, конечно, намного легче с RhinoMocks при создании кода правильный путь (никакие запечатанные классы, никакие помехи, интенсивное использование интерфейсов, виртуальных на методах класса, и т.д.)

, Если Вы отвечаете не на те вопросы, или если Вы работаете над унаследованной системой с большим количеством очень двойных классов, тогда Ваш единственный выбор будет TypeMock, который может дразнить примерно что-либо.

также было бы полезно знать, почему Вы выбираете платформу насмешки, которую Вы в настоящее время используете и если Вы все еще довольны этим, выбирают.

я выбрал RhinoMocks, потому что в то время (3 + несколько лет назад) это была ясно самая зрелая платформа насмешки с большинством функций. Я остался с ним, потому что это развилось в далеко, который делает мою жизнь намного легче (появление контейнера AutoMocking, являющегося гигантским шагом к эффективности).

то, Что мне нравится приблизительно RhinoMocks кроме набора функций и простоты использования, то, что это ведет меня к лучшему дизайну в моем коде. Я не идеальный программист, и я собираюсь сделать ошибки в дизайне. Но инструменты как RhinoMocks и NHibernate помогают вести меня к лучшему дизайну, потому что, когда я действительно делаю ошибки и создаю плохой дизайн, эти инструменты становятся болезненными для работы с. NHibernate, например, является болезненным для работы с тем, если у Вас есть плохое проектирование баз данных. RhinoMocks является очень болезненным для работы с тем, если у Вас есть плохой дизайн класса, не используют интерфейсы, не используют МОК... и т.д.

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

21
ответ дан 27 November 2019 в 18:15
поделиться

Отказ от ответственности - я работаю на Typemock

Я не согласен с «Typemock не приводит вас к хорошему дизайну». Хороший или плохой дизайн - это вы, разработчик, а не инструмент, который вы используете. Получите инструмент, который сделает работу и сделает вас продуктивными, но ответственность за хороший дизайн лежит на вас самих. Если вы думаете, что оборачиваете все виды абстракций внутри вашего кода, просто для тестирования, сделайте это, но у вас может не получиться «хорошего» дизайна. Это может быть сложнее, чем у вас сейчас.

10
ответ дан 27 November 2019 в 18:15
поделиться

Я предпочитаю Moq для.NET 3,5 проекта. Это просто в использовании и, по моему опыту, это помогает произвести чистые и ясные модульные тесты.

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

14
ответ дан 27 November 2019 в 18:15
поделиться

RhinoMock является в значительной степени платформой насмешки состояния для.NET. Не может пойти не так, как надо с ним. Я предполагаю, что можно просмотреть его "стиль" как "мастера на все руки" если Вы, так пожелайте.

От их веб-сайт :

, Что предлагают Насмешки Носорога?

  • Явная запись & воспроизведите модель для ожиданий.
  • Естественное Расположение, закон, Утверждают синтаксис
  • Поддержка.Net 2.0 и.Net 3.5
  • Работа с насмешками со строгим контролем типов.
  • действия Установки с методами, возвратите определенное значение или выдайте исключение.
  • Ожидания на основе:
    • Аргументы, соответствующие
    • Ограничения, соответствующие
    • Пользовательский обратный вызов для проверки ожидаемые аргументы с помощью собственного кода
2
ответ дан 27 November 2019 в 18:15
поделиться

заглушки выглядит интересно, и я думаю, что он может поставляться с .NET V4. Я не знаю, какая редакция студии разработчиков вам понадобится. В настоящее время вы можете скачать его по указанной выше ссылке.

Stubs - это легкая платформа для тестовые заглушки и обходные пути в .NET, то есть энтерриториально на основе делегатов, введите безопасный, реорганизуемый и исходный код генерируется. Заглушки была разработана поддержка писатель среды выполнения Code Contracts и минимизировать накладные расходы на Pex анализ белого ящика. Можно использовать заглушки по любому методу .NET, включая не виртуальные / статические методы в запечатанных типы.

(Я разместил это как ответ, а не добавил его в вопрос, так как я никогда не использовал Stabs и только несколько минут смотрел на него)

3
ответ дан 27 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: