diff --git a/django_evolution/tests/base_test_case.py b/django_evolution/tests/base_test_case.py
index 88a65bb5a5d073b4154e72ed12a9006659438f0b..0f02e742dda7e52ee13c4f5ed391846f6efa0e0e 100644
--- a/django_evolution/tests/base_test_case.py
+++ b/django_evolution/tests/base_test_case.py
@@ -474,6 +474,17 @@ class EvolutionTestCase(TestCase):
 
         super(EvolutionTestCase, self).tearDown()
 
+    def default_create_test_data(self, db_name):
+        """Default function for creating test data for base models.
+
+        By default, this won't do anything.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        pass
+
     def set_base_model(self, base_model, name=None, extra_models=[],
                        pre_extra_models=[], db_name=None):
         """Set the base model(s) that will be mutated in a test.
@@ -576,7 +587,8 @@ class EvolutionTestCase(TestCase):
                                 use_hinted_evolutions=False,
                                 perform_simulations=True,
                                 perform_mutations=True,
-                                db_name=None):
+                                db_name=None,
+                                create_test_data_func=None):
         """Perform test evolutions and validate results.
 
         This is used for most common evolution-related tests. It handles
@@ -650,6 +662,14 @@ class EvolutionTestCase(TestCase):
                 The name of the database to apply evolutions to. This
                 defaults to :py:attr:`default_database_name`.
 
+            create_test_data_func (callable, optional):
+                A function to call in order to create data in the database for
+                the initial models, before applying mutations. It must take
+                a database name.
+
+                If not provided, :py:meth:`default_create_test_data` will be
+                used.
+
         Raises:
             AssertionError:
                 A diff, simulation, or mutation test has failed.
@@ -682,12 +702,15 @@ class EvolutionTestCase(TestCase):
                                      db_name=db_name)
 
         if perform_mutations:
-            self.perform_mutations(evolutions=evolutions,
-                                   end=end,
-                                   end_sig=end_sig,
-                                   sql_name=sql_name,
-                                   rescan_indexes=rescan_indexes,
-                                   db_name=db_name)
+            self.perform_mutations(
+                evolutions=evolutions,
+                end=end,
+                end_sig=end_sig,
+                sql_name=sql_name,
+                rescan_indexes=rescan_indexes,
+                db_name=db_name,
+                create_test_data_func=(create_test_data_func or
+                                       self.default_create_test_data))
 
     def perform_diff_test(self, end_sig, diff_text=None, expected_hint=None,
                           expect_empty=False):
@@ -782,7 +805,8 @@ class EvolutionTestCase(TestCase):
         return test_sig
 
     def perform_mutations(self, evolutions, end, end_sig, sql_name=None,
-                          rescan_indexes=True, db_name=None):
+                          rescan_indexes=True, db_name=None,
+                          create_test_data_func=None):
         """Apply mutations that and verify the results.
 
         This will run through the evolution chain, applying each mutation
@@ -812,6 +836,11 @@ class EvolutionTestCase(TestCase):
             db_name (unicode, optional):
                 The name of the database to apply the evolutions against.
 
+            create_test_data_func (callable, optional):
+                A function to call in order to create data in the database for
+                the initial models, before applying mutations. It must take
+                a database name.
+
         Raises:
             AssertionError:
                 The resulting SQL did not match.
@@ -842,6 +871,9 @@ class EvolutionTestCase(TestCase):
                             end_model_entries=six.iteritems(end),
                             app_label=app_label,
                             database=db_name):
+            if create_test_data_func:
+                create_test_data_func(db_name)
+
             sql = execute_test_sql(run_mutations(),
                                    database=db_name)
 
diff --git a/django_evolution/tests/db/mysql.py b/django_evolution/tests/db/mysql.py
index adbcddb17989758346737f116702ea06103eddf3..e4c4f4643c64f57b71ab2eeb0fce4a1148f6a8d9 100644
--- a/django_evolution/tests/db/mysql.py
+++ b/django_evolution/tests/db/mysql.py
@@ -1286,7 +1286,7 @@ def constraints(connection):
 
                 "ALTER TABLE `tests_testmodel`"
                 " ADD CONSTRAINT `new_check_constraint`"
-                " CHECK (`char_field1` LIKE BINARY 'foo%%');",
+                " CHECK (`char_field1` LIKE BINARY 'test%%');",
 
                 "ALTER TABLE `tests_testmodel`"
                 " ADD CONSTRAINT `new_unique_constraint_plain`"
@@ -1296,7 +1296,7 @@ def constraints(connection):
             'setting_from_empty': [
                 "ALTER TABLE `tests_testmodel`"
                 " ADD CONSTRAINT `new_check_constraint`"
-                " CHECK (`char_field1` LIKE BINARY 'foo%%');",
+                " CHECK (`char_field1` LIKE BINARY 'test%%');",
 
                 "ALTER TABLE `tests_testmodel`"
                 " ADD CONSTRAINT `new_unique_constraint_plain`"
diff --git a/django_evolution/tests/db/postgresql.py b/django_evolution/tests/db/postgresql.py
index 26e9fe7401affec6e00d826d418cd05e17148468..5c8d961bc8e0b39a7f41f67eb54c44d1a2d28526 100644
--- a/django_evolution/tests/db/postgresql.py
+++ b/django_evolution/tests/db/postgresql.py
@@ -1551,7 +1551,7 @@ def constraints(connection):
 
             'ALTER TABLE "tests_testmodel"'
             ' ADD CONSTRAINT "new_check_constraint"'
-            ' CHECK ("char_field1"::text LIKE \'foo%%\');',
+            ' CHECK ("char_field1"::text LIKE \'test%%\');',
 
             'CREATE UNIQUE INDEX "new_unique_constraint_condition"'
             ' ON "tests_testmodel" ("int_field2")'
@@ -1565,7 +1565,7 @@ def constraints(connection):
         'setting_from_empty': [
             'ALTER TABLE "tests_testmodel"'
             ' ADD CONSTRAINT "new_check_constraint"'
-            ' CHECK ("char_field1"::text LIKE \'foo%%\');',
+            ' CHECK ("char_field1"::text LIKE \'test%%\');',
 
             'CREATE UNIQUE INDEX "new_unique_constraint_condition"'
             ' ON "tests_testmodel" ("int_field2")'
diff --git a/django_evolution/tests/db/sqlite3.py b/django_evolution/tests/db/sqlite3.py
index 472a042b22ccac435b3d7172868b586b4b3520d3..191e65ea6423bf1ef021406ce40c07de20fdb45f 100644
--- a/django_evolution/tests/db/sqlite3.py
+++ b/django_evolution/tests/db/sqlite3.py
@@ -2193,7 +2193,7 @@ def constraints(connection):
             ' "char_field1" varchar(20) NOT NULL,'
             ' "char_field2" varchar(40) NOT NULL,'
             ' CONSTRAINT "new_check_constraint"'
-            ' CHECK ("char_field1" LIKE \'foo%\' ESCAPE \'\\\'),'
+            ' CHECK ("char_field1" LIKE \'test%\' ESCAPE \'\\\'),'
             ' CONSTRAINT "new_unique_constraint_plain"'
             ' UNIQUE ("int_field1", "char_field1"));',
 
@@ -2215,7 +2215,7 @@ def constraints(connection):
             ' "char_field1" varchar(20) NOT NULL,'
             ' "char_field2" varchar(40) NOT NULL,'
             ' CONSTRAINT "new_check_constraint"'
-            ' CHECK ("char_field1" LIKE \'foo%\' ESCAPE \'\\\'),'
+            ' CHECK ("char_field1" LIKE \'test%\' ESCAPE \'\\\'),'
             ' CONSTRAINT "new_unique_constraint_plain"'
             ' UNIQUE ("int_field1", "int_field2"));',
 
diff --git a/django_evolution/tests/test_add_field.py b/django_evolution/tests/test_add_field.py
index bcbd4116b0c6828b373bafaea1332576138f57e4..ae3c7d990fa4c0b690dcf24f5213c246b2c2d51b 100644
--- a/django_evolution/tests/test_add_field.py
+++ b/django_evolution/tests/test_add_field.py
@@ -60,6 +60,16 @@ class AddFieldTests(EvolutionTestCase):
         "    Field 'added_field' has been added"
     )
 
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        AddBaseModel.objects.using(db_name).create(char_field='test',
+                                                   int_field=100)
+
     def test_with_bad_app(self):
         """Testing AddField with application not in signature"""
         mutation = AddField('TestModel', 'char_field1', models.CharField)
@@ -403,6 +413,10 @@ class AddFieldTests(EvolutionTestCase):
             class Meta(BaseTestModel.Meta):
                 db_table = 'custom_table_name'
 
+        def create_test_data(db_name):
+            CustomAddTableModel.objects.create(value=100,
+                                               alt_value='test')
+
         self.set_base_model(CustomAddTableModel, name='CustomTableModel')
 
         self.perform_evolution_tests(
@@ -418,7 +432,8 @@ class AddFieldTests(EvolutionTestCase):
                 " models.IntegerField, null=True)",
             ],
             'AddColumnCustomTableModel',
-            model_name='CustomTableModel')
+            model_name='CustomTableModel',
+            create_test_data_func=create_test_data)
 
     def test_add_primary_key_with_delete_old_fails(self):
         """Testing AddField with primary key and deleting old key fails"""
diff --git a/django_evolution/tests/test_change_field.py b/django_evolution/tests/test_change_field.py
index 8e63cdd914058d78c2a8c1052c28ac255e7d6498..6927a692e56044b10112ee8317abd6d72cdbe6fa 100644
--- a/django_evolution/tests/test_change_field.py
+++ b/django_evolution/tests/test_change_field.py
@@ -57,6 +57,30 @@ class ChangeFieldTests(EvolutionTestCase):
         ('ChangeAnchor1', ChangeAnchor1),
     ]
 
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        model = ChangeBaseModel.objects.using(db_name).create(
+            alt_pk=1,
+            int_field=2,
+            int_field1=3,
+            int_field2=4,
+            int_field3=5,
+            int_field4=6,
+            char_field='test1',
+            char_field1='test2',
+            char_field2='test3',
+            dec_field=100.25,
+            dec_field1=200.50,
+            dec_field2=300.75)
+
+        anchor = ChangeAnchor1.objects.using(db_name).create(value=42)
+        model.m2m_field1.add(anchor)
+
     def test_with_bad_app(self):
         """Testing ChangeField with application not in signature"""
         mutation = ChangeField('TestModel', 'char_field1')
diff --git a/django_evolution/tests/test_change_meta.py b/django_evolution/tests/test_change_meta.py
index 494a98dfd05388fdf5be0a78256253fd5f59260b..559a012eba2dd2afa9e06a74d0c3e260b7f0735a 100644
--- a/django_evolution/tests/test_change_meta.py
+++ b/django_evolution/tests/test_change_meta.py
@@ -101,7 +101,24 @@ class ChangeMetaUniqueTogetherBaseModel(BaseTestModel):
         unique_together = [('int_field1', 'char_field1')]
 
 
-class ChangeMetaConstraintsTests(EvolutionTestCase):
+class BaseChangeMetaTestCase(EvolutionTestCase):
+    """Base class for ChangeMeta test cases."""
+
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        self.base_model.objects.using(db_name).create(
+            int_field1=100,
+            int_field2=200,
+            char_field1='test1',
+            char_field2='test2')
+
+
+class ChangeMetaConstraintsTests(BaseChangeMetaTestCase):
     """Unit tests for ChangeMeta with constraints."""
 
     sql_mapping_key = 'constraints'
@@ -146,7 +163,7 @@ class ChangeMetaConstraintsTests(EvolutionTestCase):
             class Meta(BaseTestModel.Meta):
                 constraints = [
                     CheckConstraint(name='new_check_constraint',
-                                    check=Q(char_field1__startswith='foo')),
+                                    check=Q(char_field1__startswith='test')),
                     UniqueConstraint(name='new_unique_constraint_condition',
                                      fields=['int_field2'],
                                      condition=Q(int_field2=100)),
@@ -165,7 +182,7 @@ class ChangeMetaConstraintsTests(EvolutionTestCase):
                         {
                             'type': CheckConstraint,
                             'name': 'new_check_constraint',
-                            'check': Q(char_field1__startswith='foo'),
+                            'check': Q(char_field1__startswith='test'),
                         },
                         {
                             'type': UniqueConstraint,
@@ -183,7 +200,7 @@ class ChangeMetaConstraintsTests(EvolutionTestCase):
             diff_text=self.DIFF_TEXT,
             expected_hint=[
                 "ChangeMeta('TestModel', 'constraints',"
-                " [{'check': models.Q(char_field1__startswith='foo'),"
+                " [{'check': models.Q(char_field1__startswith='test'),"
                 " 'name': 'new_check_constraint',"
                 " 'type': models.CheckConstraint},"
                 " {'condition': models.Q(int_field2=100),"
@@ -207,7 +224,7 @@ class ChangeMetaConstraintsTests(EvolutionTestCase):
             class Meta(BaseTestModel.Meta):
                 constraints = [
                     CheckConstraint(name='new_check_constraint',
-                                    check=Q(char_field1__startswith='foo')),
+                                    check=Q(char_field1__startswith='test')),
                     UniqueConstraint(name='new_unique_constraint_condition',
                                      condition=Q(char_field2='bar'),
                                      fields=['int_field2']),
@@ -226,7 +243,7 @@ class ChangeMetaConstraintsTests(EvolutionTestCase):
                         {
                             'type': CheckConstraint,
                             'name': 'new_check_constraint',
-                            'check': Q(char_field1__startswith='foo'),
+                            'check': Q(char_field1__startswith='test'),
                         },
                         {
                             'type': UniqueConstraint,
@@ -244,7 +261,7 @@ class ChangeMetaConstraintsTests(EvolutionTestCase):
             diff_text=self.DIFF_TEXT,
             expected_hint=[
                 "ChangeMeta('TestModel', 'constraints',"
-                " [{'check': models.Q(char_field1__startswith='foo'),"
+                " [{'check': models.Q(char_field1__startswith='test'),"
                 " 'name': 'new_check_constraint',"
                 " 'type': models.CheckConstraint},"
                 " {'condition': models.Q(char_field2='bar'),"
@@ -359,7 +376,7 @@ class ChangeMetaConstraintsTests(EvolutionTestCase):
             sql_name='removing')
 
 
-class ChangeMetaIndexesTests(EvolutionTestCase):
+class ChangeMetaIndexesTests(BaseChangeMetaTestCase):
     """Unit tests for ChangeMeta with indexes."""
 
     sql_mapping_key = 'indexes'
@@ -564,7 +581,7 @@ class ChangeMetaIndexesTests(EvolutionTestCase):
             rescan_indexes=False)
 
 
-class ChangeMetaIndexTogetherTests(EvolutionTestCase):
+class ChangeMetaIndexTogetherTests(BaseChangeMetaTestCase):
     """Unit tests for ChangeMeta with index_together."""
 
     sql_mapping_key = 'index_together'
@@ -731,7 +748,7 @@ class ChangeMetaIndexTogetherTests(EvolutionTestCase):
             rescan_indexes=False)
 
 
-class ChangeMetaUniqueTogetherTests(EvolutionTestCase):
+class ChangeMetaUniqueTogetherTests(BaseChangeMetaTestCase):
     """Unit tests for ChangeMeta with unique_together."""
 
     sql_mapping_key = 'unique_together'
diff --git a/django_evolution/tests/test_delete_app.py b/django_evolution/tests/test_delete_app.py
index bd6c1be9c9ba6626e55241be5d0ca101b227c85c..ccd64844db4c0b3509c7c44fb48145e1fc352eea 100644
--- a/django_evolution/tests/test_delete_app.py
+++ b/django_evolution/tests/test_delete_app.py
@@ -49,6 +49,22 @@ class DeleteAppTests(EvolutionTestCase):
         ('CustomTestModel', AppDeleteCustomTableModel),
     ]
 
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        anchor1 = AppDeleteAnchor1.objects.using(db_name).create(value=100)
+        anchor2 = AppDeleteAnchor1.objects.using(db_name).create(value=100)
+
+        model = AppDeleteBaseModel.objects.using(db_name).create(
+            char_field='test',
+            int_field=1,
+            anchor_fk=anchor1)
+        model.m2m.add(anchor2)
+
     def test_with_bad_app(self):
         """Testing DeleteApplication with application not in signature"""
         mutation = DeleteApplication()
diff --git a/django_evolution/tests/test_delete_field.py b/django_evolution/tests/test_delete_field.py
index 9107556b8bdc9d9d17c0b474bd980bb6da5286cc..57cc30b7f89a281b0369dc1424a22976014aa3d0 100644
--- a/django_evolution/tests/test_delete_field.py
+++ b/django_evolution/tests/test_delete_field.py
@@ -59,6 +59,26 @@ class DeleteFieldTests(EvolutionTestCase):
         ('DeleteAnchor4', DeleteAnchor4),
     ]
 
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        anchor1 = DeleteAnchor1.objects.using(db_name).create(value=100)
+        anchor2 = DeleteAnchor3.objects.using(db_name).create(value=200)
+        anchor3 = DeleteAnchor4.objects.using(db_name).create(value=300)
+
+        model = DeleteBaseModel.objects.using(db_name).create(
+            char_field='test',
+            int_field=1,
+            int_field2=2,
+            int_field3=3,
+            fk_field1=anchor1)
+        model.m2m_field1.add(anchor2)
+        model.m2m_field2.add(anchor3)
+
     def test_with_bad_app(self):
         """Testing DeleteField with application not in signature"""
         mutation = DeleteField('TestModel', 'char_field1')
@@ -277,6 +297,10 @@ class DeleteFieldTests(EvolutionTestCase):
             class Meta(BaseTestModel.Meta):
                 db_table = 'custom_table_name'
 
+        def create_test_data(db_name):
+            CustomDeleteTableModel.objects.create(value=100,
+                                                  alt_value='test')
+
         self.set_base_model(CustomDeleteTableModel, name='CustomTableModel')
 
         self.perform_evolution_tests(
@@ -290,4 +314,5 @@ class DeleteFieldTests(EvolutionTestCase):
                 "DeleteField('CustomTableModel', 'value')",
             ],
             'DeleteColumnCustomTableModel',
-            model_name='CustomTableModel')
+            model_name='CustomTableModel',
+            create_test_data_func=create_test_data)
diff --git a/django_evolution/tests/test_preprocessing.py b/django_evolution/tests/test_preprocessing.py
index 4463427ca15a21af08db2c37b10babe26b61eb52..1f497f56d4935c6fdf0848f167ac66f7d3098bd4 100644
--- a/django_evolution/tests/test_preprocessing.py
+++ b/django_evolution/tests/test_preprocessing.py
@@ -23,6 +23,15 @@ class PreprocessingTests(EvolutionTestCase):
     sql_mapping_key = 'preprocessing'
     default_base_model = PreprocBaseModel
 
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        PreprocBaseModel.objects.using(db_name).create(char_field='test')
+
     def test_add_delete_field(self):
         """Testing pre-processing AddField + DeleteField"""
         class DestModel(BaseTestModel):
diff --git a/django_evolution/tests/test_rename_field.py b/django_evolution/tests/test_rename_field.py
index c81ed16933a6663679892cbdc8bb4aa4dc57a17f..e26c2b378eb036143edf512f53458c5a06faa35c 100644
--- a/django_evolution/tests/test_rename_field.py
+++ b/django_evolution/tests/test_rename_field.py
@@ -58,6 +58,26 @@ class RenameFieldTests(EvolutionTestCase):
         ('RenameAnchor3', RenameAnchor3),
     ]
 
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        anchor1 = RenameAnchor1.objects.using(db_name).create(value=100)
+        anchor2 = RenameAnchor2.objects.using(db_name).create(value=200)
+        anchor3 = RenameAnchor3.objects.using(db_name).create(value=300)
+
+        model = RenameFieldBaseModel.objects.using(db_name).create(
+            char_field='test',
+            int_field=1,
+            int_field_named=2,
+            int_field_named_indexed=3,
+            fk_field=anchor1)
+        model.m2m_field.add(anchor2)
+        model.m2m_field_named.add(anchor3)
+
     def test_with_bad_app(self):
         """Testing RenameField with application not in signature"""
         mutation = RenameField('TestModel', 'char_field1', 'char_field2')
@@ -354,6 +374,10 @@ class RenameFieldTests(EvolutionTestCase):
             class Meta(BaseTestModel.Meta):
                 db_table = 'custom_rename_table_name'
 
+        def create_test_data(db_name):
+            CustomRenameTableModel.objects.create(value=1,
+                                                  alt_value='test')
+
         self.set_base_model(CustomRenameTableModel,
                             name='CustomRenameTableModel')
 
@@ -373,7 +397,8 @@ class RenameFieldTests(EvolutionTestCase):
                 "DeleteField('CustomRenameTableModel', 'value')",
             ],
             'RenameColumnCustomTableModel',
-            model_name='CustomRenameTableModel')
+            model_name='CustomRenameTableModel',
+            create_test_data_func=create_test_data)
 
     def test_rename_m2m_table(self):
         """Testing RenameField with renaming ManyToManyField table name"""
diff --git a/django_evolution/tests/test_sql_mutation.py b/django_evolution/tests/test_sql_mutation.py
index 7c897fc56c6f80fd2c0737a6ecca7c54102bbd69..5eec57562e5000b6787524aaaf583a6875cdae05 100644
--- a/django_evolution/tests/test_sql_mutation.py
+++ b/django_evolution/tests/test_sql_mutation.py
@@ -27,6 +27,16 @@ class SQLMutationTests(EvolutionTestCase):
     sql_mapping_key = 'sql_mutation'
     default_base_model = SQLBaseModel
 
+    def default_create_test_data(self, db_name):
+        """Create test data for the base model.
+
+        Args:
+            db_name (unicode):
+                The name of the database to create models on.
+        """
+        SQLBaseModel.objects.using(db_name).create(char_field='test',
+                                                   int_field=1)
+
     def test_add_fields_no_update_func(self):
         """Testing SQLMutation and no update_func provided"""
         mutation = SQLMutation('test', '')
