Статьи

FactoryPal: новая платформа Scala для создания объектов в виде тестовых данных

FactoryPal — это фреймворк Scala, позволяющий создавать объекты в виде тестовых данных. Все, что вам нужно сделать, это определить шаблоны для каждого из классов, из которых вы хотите, чтобы FactoryPal создавал объекты. После этого FactoryPal позаботится обо всем остальном.

Вы когда-нибудь слышали о factory_girl супер крутой Ruby Framework? Что ж, FactoryPal — это factory_girl для Scala. Это очень похоже на его использование. Разница в том, что FactoryPal на 100% безопасен, что всем нам нравится в Scala.

Вот ссылка на Github для беспокойных https://github.com/mgonto/factory_pal

Как мы это используем?

FactoryPal — это одноэлементный объект, где вы можете зарегистрировать все шаблоны. Например, вы можете определить шаблон следующим образом:

1
2
3
4
FactoryPal.register[Person] { person =>
    person.name.mapsTo('gonto') and
    person.age.isRandom
}

В этом примере мы регистрируем новый шаблон для модели класса. Если мы попытаемся установить значение для свойства, которого у Person нет, ваш проект не будет скомпилирован. Если вы попытаетесь установить значение для свойства, которое не является типом этого свойства, проект также не будет компилироваться. Довольно круто, да? Это стало возможным благодаря Scala Macros и Dynamic — двум функциям, добавленным в последний выпуск Scala 2.10 RC.

В настоящее время существует 3 поддерживаемых операции над шаблоном поля.

  • mapsTo : это устанавливает определенное значение для этого свойства.
  • isRandom : устанавливает случайное значение в зависимости от типа поля. Я создал несколько неявных рандомизаторов для общих объектов (String, Long, Int, Double и т. Д.), Но вы можете создать свой собственный. Это очень похоже на Ordering [T], используемый в List.
  • isAnotherFactoryModel : вы говорите FactoryPal, что это внутренний объект, который может быть создан с помощью другого шаблона FactoryPal. В настоящее время может быть только один шаблон для каждого класса. Я собираюсь изменить это очень скоро.

После того, как мы создали шаблон, мы можем создать объекты этого шаблона следующим образом:

1
val person = FactoryPal.create[Person]

У метода create есть еще одна перегрузка, которая позволяет добавлять некоторые переопределители полей для определенного теста. Например, вы можете сделать следующее:

1
2
3
val person = FactoryPal.create[Person] { (person : ObjectBuilder[Person]) =>
    person.age.mapsTo(45) alone
}

Вот и все. Это все, что вам нужно знать, чтобы использовать это.

Как я могу добавить это в свой проект?

Это пример конфигурации для Build.scala для вашего проекта SBT. Пока есть только снимки, так как Scala 2.10 еще не окончательный Как только это произойдет, я собираюсь сделать релиз.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import sbt._
import sbt.Keys._
 
object ApplicationBuild extends Build {
 
  lazy val root = Project(
    id = 'factory_pal_sample',
    base = file('.'),
    settings = Project.defaultSettings ++ Seq(
      name := 'factory_pal_sample',
      organization := 'ar.com.gonto',
      version := '0.1',
      scalaVersion := '2.10.0-RC3',
      scalacOptions += '',
      licenses      := ('Apache2', new java.net.URL('http://www.apache.org/licenses/LICENSE-2.0.txt')) :: Nil,
      libraryDependencies ++= Seq(
       'org.scala-lang' % 'scala-compiler' % '2.10.0-RC3',
       'ar.com.gonto' % 'factory_pal_2.10' % '0.1-SNAPSHOT',
       'org.scalatest' % 'scalatest_2.10.0-RC3' % '1.8-B1' % 'test'
      ),
      resolvers ++= Seq(
         'Typesafe repository' at 'http://repo.typesafe.com/typesafe/releases/',
         Resolver.url('Factory Pal Repository',
          url('http://mgonto.github.com/snapshots/'))(Resolver.ivyStylePatterns)
      )
    )
  )
}

Посмотрите на зависимость и хранилище!

Что он использует внутри?

Внутри этой среды используются макросы Scala, Dynamic и новая библиотека отражений, предоставляемая Scala 2.10.

Следующие шаги

Следующие вещи, которые я хочу сделать:

  • Добавить возможность иметь несколько шаблонов для одного класса
  • Добавить шаблон наследования
  • Добавьте помощников, чтобы использовать это с ScalaTest и Specs2. На данный момент вы можете создавать шаблоны в ранее.

Для получения дополнительной информации или для просмотра кода перейдите на Github

Ссылка: FactoryPal: новая среда Scala для создания объектов в виде тестовых данных от нашего партнера по JCG Себастьяна Скарано на платформе « Весело с Play! блог.