diff --git a/tests/modules/migrate_plus_migration_test/migrate_plus_migration_test.info.yml b/tests/modules/migrate_plus_migration_test/migrate_plus_migration_test.info.yml
new file mode 100644
index 0000000..8eba9a9
--- /dev/null
+++ b/tests/modules/migrate_plus_migration_test/migrate_plus_migration_test.info.yml
@@ -0,0 +1,9 @@
+name: 'Migrate plus migration test'
+type: module
+description: 'Migrate plus migration test'
+package: Testing
+core: 8.x
+
+dependencies:
+ - entity_reference_revisions
+ - migrate
diff --git a/tests/modules/migrate_plus_migration_test/migration_templates/migrate_plus_migration_test.yml b/tests/modules/migrate_plus_migration_test/migration_templates/migrate_plus_migration_test.yml
new file mode 100644
index 0000000..c6e8d31
--- /dev/null
+++ b/tests/modules/migrate_plus_migration_test/migration_templates/migrate_plus_migration_test.yml
@@ -0,0 +1,17 @@
+id: migrate_plus_migration_test
+migration_tags: {}
+label: 'Migrate Plus Migration Test'
+source:
+  plugin: migrate_plus_dummy
+process:
+  id: id
+  type:
+    plugin: default_value
+    default_value: page
+  title: title
+  field_entity_reference:
+    plugin: entity_generate
+    source: term
+destination:
+  plugin: 'entity:node'
+migration_dependencies: {  }
diff --git a/tests/modules/migrate_plus_migration_test/src/Plugin/migrate/source/DummySource.php b/tests/modules/migrate_plus_migration_test/src/Plugin/migrate/source/DummySource.php
new file mode 100644
index 0000000..c3e1039
--- /dev/null
+++ b/tests/modules/migrate_plus_migration_test/src/Plugin/migrate/source/DummySource.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Drupal\migrate_plus_migration_test\Plugin\migrate\source;
+
+use Drupal\migrate\Plugin\migrate\source\SourcePluginBase;
+
+/**
+ * @MigrateSource(
+ *   id = "migrate_plus_dummy",
+ *   requirements_met = true
+ * )
+ */
+class DummySource extends SourcePluginBase  {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __toString() {
+    return 'Dummy source';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return [
+      'id' => [
+        'type' => 'integer',
+      ]
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function initializeIterator() {
+    return new \ArrayIterator([
+      [
+        'id' => 1,
+        'title' => 'content item 1',
+        'term' => 'Apples',
+      ],
+      [
+        'id' => 2,
+        'title' => 'content item 2',
+        'term' => 'Bananas'],
+    ]);
+  }
+}
diff --git a/tests/src/Kernel/Plugin/migrate/process/EntityGenerateTest.php b/tests/src/Kernel/Plugin/migrate/process/EntityGenerateTest.php
new file mode 100644
index 0000000..be68ee4
--- /dev/null
+++ b/tests/src/Kernel/Plugin/migrate/process/EntityGenerateTest.php
@@ -0,0 +1,151 @@
+<?php
+
+namespace Drupal\Tests\migrate_plus\Kernel\Plugin\migrate\process;
+
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessageInterface;
+use Drupal\migrate\Plugin\Migration;
+use Drupal\migrate\Plugin\MigrationPluginManager;
+use Drupal\node\Entity\NodeType;
+use Drupal\node\NodeStorageInterface;
+use Drupal\taxonomy\TermStorageInterface;
+use Drupal\taxonomy\Tests\TaxonomyTestTrait;
+
+/**
+ * Tests the migration plugin.
+ *
+ * @coversDefaultClass \Drupal\migrate_plus\Plugin\migrate\process\EntityGenerate
+ * @group entity_reference_revisions
+ */
+class EntityGenerateTest extends KernelTestBase implements MigrateMessageInterface {
+
+  use EntityReferenceTestTrait;
+  use TaxonomyTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'migrate_plus',
+    'migrate',
+    'migrate_plus_migration_test',
+    'user',
+    'system',
+    'node',
+    'taxonomy',
+    'field',
+    'text',
+    'filter',
+  ];
+
+  /**
+   * The entity type used in this test.
+   *
+   * @var string
+   */
+  protected $entityType = 'node';
+
+  /**
+   * The entity type that is being referenced.
+   *
+   * @var string
+   */
+  protected $referencedEntityType = 'taxonomy_term';
+
+  /**
+   * The bundle used in this test.
+   *
+   * @var string
+   */
+  protected $bundle = 'page';
+
+  /**
+   * The name of the field used in this test.
+   *
+   * @var string
+   */
+  protected $fieldName = 'field_entity_reference';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    // Create article content type.
+    $values = [
+      'type' => $this->bundle,
+      'name' => 'Page',
+    ];
+    $node_type = NodeType::create($values);
+    $node_type->save();
+
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('taxonomy_term');
+    $this->installEntitySchema('taxonomy_vocabulary');
+    $this->installEntitySchema('user');
+    $this->installSchema('system', ['sequences']);
+    $this->installSchema('user', 'users_data');
+    $this->installConfig($this->modules);
+
+    // Create a vocabulary.
+    $vocabulary = $this->createVocabulary();
+
+    // Create a field.
+    $this->createEntityReferenceField(
+      $this->entityType,
+      $this->bundle,
+      $this->fieldName,
+      'Term reference',
+      $this->referencedEntityType,
+      'default',
+      ['target_bundles' => [$vocabulary->id()]],
+      FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED
+    );
+  }
+
+  /**
+   * Tests generating an entity.
+   *
+   * @covers ::transform
+   */
+  public function testTransform() {
+    /** @var MigrationPluginManager $migrationManager */
+    $migrationManager = $this->container
+      ->get('plugin.manager.migration');
+    $definition = $migrationManager
+      ->getDefinition('migrate_plus_migration_test');
+    /** @var Migration $migration */
+    $migration = $migrationManager->createStubMigration($definition);
+    /** @var TermStorageInterface $termStorage */
+    $termStorage = $this->container
+      ->get('entity_type.manager')
+      ->getStorage($this->referencedEntityType);
+    /** @var NodeStorageInterface $nodeStorage */
+    $nodeStorage = $this->container
+      ->get('entity_type.manager')
+      ->getStorage($this->entityType);
+
+    $migrationExecutable = (new MigrateExecutable($migration, $this));
+
+    $migrationExecutable->import();
+    $entity = $termStorage->load(1);
+    $this->assertEquals('Apples', $entity->label());
+    $entity = $nodeStorage->load(1);
+    $this->assertEquals('content item 1', $entity->label());
+    $entity = $termStorage->load(2);
+    $this->assertEquals('Bananas', $entity->label());
+    $entity = $nodeStorage->load(2);
+    $this->assertEquals('content item 2', $entity->label());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function display($message, $type = 'status') {
+    $this->assertTrue($type == 'status', $message);
+  }
+
+}
