Index: /lang/perl/Data-Model/trunk/t/Utils.pm
===================================================================
--- /lang/perl/Data-Model/trunk/t/Utils.pm (revision 29478)
+++ /lang/perl/Data-Model/trunk/t/Utils.pm (revision 29526)
@@ -27,4 +27,17 @@
 }
 
+my $CACHE_CLASS;
+sub _make_driver_instance {
+    my $class = shift;
+    my $driver = $class->new( @_ );
+
+    if ($CACHE_CLASS) {
+        $driver = $CACHE_CLASS->new(
+            fallback => $driver
+        );
+    }
+    $driver;
+}
+
 my $RUN_CODE = sub {};
 sub setup_test {
@@ -46,4 +59,10 @@
     };
 
+    if (my $cache = $config->{cache}) {
+        # use cache
+        $CACHE_CLASS = "Data::Model::Driver::Cache::$cache";
+        eval "use $CACHE_CLASS"; $@ and die $@;
+    }
+
     my $dsn = $config->{dsn} || '';
     if ($dsn || $config->{driver} eq 'Memory') {
@@ -53,5 +72,6 @@
         }
 
-        $main::DRIVER = $driver->new(
+        $main::DRIVER = _make_driver_instance(
+            $driver,
             dsn => $dsn,
             username => $config->{username} || '',
@@ -77,5 +97,6 @@
 
             my $port = empty_port();
-            $main::DRIVER = $driver->new(
+            $main::DRIVER = _make_driver_instance(
+                $driver,
                 memcached => Cache::Memcached::Fast->new({ servers => [ { address => "localhost:$port" }, ], }),
                 %{ $config->{driver_config} },
@@ -108,5 +129,6 @@
             plan skip_all => 'can not running memcached server' if $sock;
 
-            $main::DRIVER = $driver->new(
+            $main::DRIVER = _make_driver_instance(
+                $driver,
                 memcached => Cache::Memcached::Fast->new({ servers => [ { address => ($memcached_address || 'localhost:11211') }, ], }),
                 %{ $config->{driver_config} },
