diff --git a/microdata.info b/microdata.info
index 3de39f5..0349130 100755
--- a/microdata.info
+++ b/microdata.info
@@ -8,3 +8,4 @@ files[] = microdata.features.inc
 files[] = microdata.test
 ; Integration tests for contrib modules.
 files[] = modules/email/email.test
+files[] = modules/geofield/geofield.test
diff --git a/modules/geofield/geofield.test b/modules/geofield/geofield.test
new file mode 100644
index 0000000..9d6ab7a
--- /dev/null
+++ b/modules/geofield/geofield.test
@@ -0,0 +1,158 @@
+<?php
+
+/**
+ * @file
+ * Tests for Geofield module.
+ */
+
+
+/**
+ * Test Geofield module microdata placement.
+ */
+class GeofieldTestCase extends MicrodataFieldTestCase {
+
+  /**
+   * Sets the display information for the tests
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Microdata markup - geofield field',
+      'description' => 'Microdata field test for the geofield module.',
+      'group' => 'Microdata Field Integration',
+    );
+  }
+
+  /**
+   * Implements DrupalWebTestCase::setUp().
+   */
+  public function setUp() {
+    $this->fieldWidgetTypes = array(
+      //'geofield_wkt',
+      //'geofield_geojson',
+      'geofield_latlon',
+      //'geofield_bounds',
+      //'geofield_textfields',
+      //'geofield_geolocation',
+    );
+
+    $this->fieldFormatterTypes = array(
+      //'geofield_wkt',
+      //'geofield_geojson',
+      //'geofield_kml',
+      //'geofield_gpx',
+      'geofield_latlon',
+      //'geofield_lat',
+      //'geofield_lon',
+      //'geofield_geo_type',
+      //'geofield_def_list',
+      //'geofield_description',
+    );
+
+    parent::setUp('geofield');
+  }
+
+  /**
+   * Implements MicrodataFieldTestCase::getFields().
+   */
+  protected function getFields() {
+    // Create fields for the field collection and for the field group.
+    $fields = array();
+    foreach ($this->fieldWidgetTypes as $widget_type) {
+      foreach ($this->fieldFormatterTypes as $type) {
+        $fields[] = array(
+          'field_name' => "{$widget_type}_{$type}",
+          'type' => 'geofield',
+        );
+      }
+    }
+    return $fields;
+  }
+
+  /**
+   * Implements MicrodataFieldTestCase::getInstances().
+   */
+  protected function getInstances() {
+    // Create instances for the field collection and for the field group.
+    $instances = array();
+    foreach ($this->fieldWidgetTypes as $widget_type) {
+      foreach ($this->fieldFormatterTypes as $type) {
+        $instances[] = array(
+          'field_name' => "{$widget_type}_{$type}",
+          'entity_type' => $this->entityType,
+          'bundle' => $this->bundleType,
+          'widget' => array(
+            'type' => $widget_type,
+          ),
+          'display' => array(  
+            'full' => array(
+              'type' => $type,
+            ),
+          ),
+        );
+      }
+    }
+    return $instances;
+  }
+
+  /**
+   * Implements MicrodataFieldTestCase::getMapping().
+   */
+  protected function getMapping() {
+    foreach ($this->fieldWidgetTypes as $widget_type) {
+      foreach ($this->fieldFormatterTypes as $type) {
+        $mapping[$this->entityType][$this->bundleType]["{$widget_type}_{$type}"] = array(
+          'lat' => array(
+            '#itemprop' => array("{$widget_type}_{$type}_lat"),
+          ),
+          'lon' => array(
+            '#itemprop' => array("{$widget_type}_{$type}_lon"),
+          ),
+          //'schemaorg_shape' => array(
+          //  '#itemprop' => array("{$type}_shape"),
+          //),
+        );
+      }
+    }
+    return $mapping;
+  }
+
+  /**
+   * Tests whether microdata is correctly outputted, depending
+   * on the field formatter type.
+   */
+  public function testMarkup() {
+    $properties = array(
+      'lat' => "50",
+      'lon'=> "50",
+      //'shape' => "",
+    );
+
+    $node = $this->drupalCreateNode(array('type' => $this->bundleType, 'promote' => 1));
+    foreach ($this->fieldWidgetTypes as $widget_type) {
+      foreach ($this->fieldFormatterTypes as $type) {
+        $edit["{$widget_type}_{$type}[und][0][lat]"] = $properties['lat'];
+        $edit["{$widget_type}_{$type}[und][0][lon]"] = $properties['lon'];
+        //$edit["{$type}[und][0][shape]"] = $properties['shape'];
+      }
+    }
+    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
+
+    // Get the microdata result for the page.
+    $md = $this->parseMicrodata();
+
+    // Get the entity as a microdata item.
+    $item = $md->items[0];
+
+    // Test fields enriched with microdata.
+    foreach ($this->fieldWidgetTypes as $widget_type) {
+      foreach ($this->fieldFormatterTypes as $type) {
+        $text_itemprop = "{$widget_type}_{$type}_lat";
+        $this->assertEqual($properties['lat'], $item->properties[$text_itemprop][0], "Itemprop is placed on {$type}_lat");
+  
+        $text_itemprop = "{$widget_type}_{$type}_lon";
+        $this->assertEqual($properties['lon'], $item->properties[$text_itemprop][0], "Itemprop is placed on {$type}_lon");
+      }
+    }
+  }
+
+}
