Index: tests/modeltests/model_package/tests.py
===================================================================
--- tests/modeltests/model_package/tests.py	(revision 14215)
+++ tests/modeltests/model_package/tests.py	(working copy)
@@ -1,4 +1,5 @@
 from django.db import models
+from django.test import TestCase
 
 class Advertisment(models.Model):
     customer = models.CharField(max_length=100)
@@ -7,75 +8,49 @@
     class Meta:
         app_label = 'model_package'
 
-__test__ = {'API_TESTS': """
->>> from models.publication import Publication
->>> from models.article import Article
 
->>> p = Publication(title="FooBar")
->>> p.save()
->>> p
-<Publication: Publication object>
-
->>> from django.contrib.sites.models import Site
->>> current_site = Site.objects.get_current()
->>> current_site
-<Site: example.com>
-
-# Regression for #12168: models split into subpackages still get M2M tables
-
->>> a = Article(headline="a foo headline")
->>> a.save()
->>> a.publications.add(p)
->>> a.sites.add(current_site)
-
->>> a = Article.objects.get(id=1)
->>> a
-<Article: Article object>
->>> a.id
-1
->>> a.sites.count()
-1
-
-# Regression for #12245 - Models can exist in the test package, too
-
->>> ad = Advertisment(customer="Lawrence Journal-World")
->>> ad.save()
->>> ad.publications.add(p)
-
->>> ad = Advertisment.objects.get(id=1)
->>> ad
-<Advertisment: Advertisment object>
-
->>> ad.publications.count()
-1
-
-# Regression for #12386 - field names on the autogenerated intermediate class
-# that are specified as dotted strings don't retain any path component for the
-# field or column name
-
->>> Article.publications.through._meta.fields[1].name
-'article'
-
->>> Article.publications.through._meta.fields[1].get_attname_column()
-('article_id', 'article_id')
-
->>> Article.publications.through._meta.fields[2].name
-'publication'
-
->>> Article.publications.through._meta.fields[2].get_attname_column()
-('publication_id', 'publication_id')
-
-# The oracle backend truncates the name to 'model_package_article_publ233f'.
->>> Article._meta.get_field('publications').m2m_db_table() \\
-... in ('model_package_article_publications', 'model_package_article_publ233f')
-True
-
->>> Article._meta.get_field('publications').m2m_column_name()
-'article_id'
-
->>> Article._meta.get_field('publications').m2m_reverse_name()
-'publication_id'
-
-"""}
-
-
+class ModelPackageTests(TestCase):
+    def test_model_packages(self):
+        from models.publication import Publication
+        from models.article import Article
+        p = Publication(title="FooBar")
+        p.save()
+        self.assertEqual(repr(p), "<Publication: Publication object>")
+        
+        from django.contrib.sites.models import Site
+        current_site = Site.objects.get_current()
+        self.assertEqual(repr(current_site), "<Site: example.com>")
+        
+        # Regression for #12168: models split into subpackages still get M2M tables
+        a = Article(headline="a foo headline")
+        a.save()
+        a.publications.add(p)
+        a.sites.add(current_site)
+        
+        a = Article.objects.get(id=1)
+        self.assertEqual(repr(a), "<Article: Article object>")
+        self.assertEqual(a.id, 1)
+        self.assertEqual(a.sites.count(), 1)
+    
+        # Regression for #12245 - Models can exist in the test package, too
+        ad = Advertisment(customer="Lawrence Journal-World")
+        ad.save()
+        ad.publications.add(p)
+        
+        ad = Advertisment.objects.get(id=1)
+        self.assertEqual(repr(ad), "<Advertisment: Advertisment object>")
+        self.assertEqual(ad.publications.count(), 1)
+        
+        # Regression for #12386 - field names on the autogenerated intermediate class
+        # that are specified as dotted strings don't retain any path component for the
+        # field or column name
+        self.assertEqual(Article.publications.through._meta.fields[1].name, 'article')
+        self.assertEqual(Article.publications.through._meta.fields[1].get_attname_column(), ('article_id', 'article_id'))
+        self.assertEqual(Article.publications.through._meta.fields[2].name, 'publication')
+        self.assertEqual(Article.publications.through._meta.fields[2].get_attname_column(), ('publication_id', 'publication_id'))
+        
+        # The oracle backend truncates the name to 'model_package_article_publ233f'.
+        self.assertTrue(Article._meta.get_field('publications').m2m_db_table() in ('model_package_article_publications', 'model_package_article_publ233f'))
+        
+        self.assertEqual(Article._meta.get_field('publications').m2m_column_name(), 'article_id')
+        self.assertEqual(Article._meta.get_field('publications').m2m_reverse_name(), 'publication_id')
