diff -r fcf918fa9b40 django/db/backends/sqlite3/creation.py
--- a/django/db/backends/sqlite3/creation.py	Mon Mar 12 20:28:09 2012 +0000
+++ b/django/db/backends/sqlite3/creation.py	Tue Mar 13 14:26:10 2012 -0300
@@ -72,3 +72,18 @@
 
     def set_autocommit(self):
         self.connection.connection.isolation_level = None
+
+    def test_db_signature(self):
+        """
+        Returns a tuple that uniquely identifies a test database.
+
+        This takes into account the special cases of ":memory:" and "" for
+        SQLite since the databases will be distinct despite having the same
+        TEST_NAME. See http://www.sqlite.org/inmemorydb.html
+        """
+        settings_dict = self.connection.settings_dict
+        test_dbname = self._get_test_db_name()
+        sig = [self.connection.settings_dict['NAME']]
+        if test_dbname == ':memory:':
+            sig.append(self.connection.alias)
+        return tuple(sig)
diff -r fcf918fa9b40 tests/regressiontests/test_runner/tests.py
--- a/tests/regressiontests/test_runner/tests.py	Mon Mar 12 20:28:09 2012 +0000
+++ b/tests/regressiontests/test_runner/tests.py	Tue Mar 13 14:26:10 2012 -0300
@@ -11,6 +11,7 @@
 from django.core.management import call_command
 from django.test import simple
 from django.test.simple import DjangoTestSuiteRunner, get_tests
+from django.test.testcases import connections_support_transactions
 from django.test.utils import get_warnings_state, restore_warnings_state
 from django.utils import unittest
 from django.utils.importlib import import_module
@@ -262,3 +263,38 @@
         "Test for #12658 - Tests with ImportError's shouldn't fail silently"
         module = import_module(TEST_APP_ERROR)
         self.assertRaises(ImportError, get_tests, module)
+
+
+class Sqlite3InMemoryTestDbs(unittest.TestCase):
+    def test_transaction_support(self):
+        """Ticket #16329: sqlite3 in-memory test databases"""
+        from django import db
+        old_db_connections = db.connections
+        for option in ('NAME', 'TEST_NAME'):
+            try:
+                db.connections = db.ConnectionHandler({
+                    'default': {
+                        'ENGINE': 'django.db.backends.sqlite3',
+                        option: ':memory:',
+                    },
+                    'other': {
+                        'ENGINE': 'django.db.backends.sqlite3',
+                        option: ':memory:',
+                    },
+                })
+                other = db.connections['other']
+                self.assertEqual(other.features.supports_transactions, None)
+                DjangoTestSuiteRunner(verbosity=0).setup_databases()
+                # Transaction support should be properly initialised for the 'other' DB
+                self.assertNotEqual(
+                    other.features.supports_transactions,
+                    None,
+                    "DATABASES setting '%s' option set to sqlite3's ':memory:' value causes problems with transaction support detection." % option
+                )
+                # And all the DBs should report that support transactions
+                self.assertTrue(
+                    connections_support_transactions(),
+                    "DATABASES setting '%s' option set to sqlite3's ':memory:' value causes problems with transaction support detection." % option
+                )
+            finally:
+                db.connections = old_db_connections
