diff --git a/doc/developers/utilities.rst b/doc/developers/utilities.rst
index daf1edfc1177df00eb9b09d5b40bf4b418b5d6ab..6353373d686a66aaefae726a93f59e1fa115fbc1 100644
--- a/doc/developers/utilities.rst
+++ b/doc/developers/utilities.rst
@@ -239,8 +239,8 @@ Benchmarking
 Testing Functions
 =================
 
-- :func:`testing.assert_in`: Compare string elements within lists.
-  Used in :mod:`sklearn.datasets` tests.
+- :func:`testing.assert_in`, :func:`testing.assert_not_in`: Assertions for
+  container membership. Designed for forward compatibility with Nose 1.0.
 
 - :class:`mock_urllib2`: Object which mocks the urllib2 module to fake
   requests of mldata.  Used in tests of :mod:`sklearn.datasets`.
diff --git a/sklearn/datasets/tests/test_mldata.py b/sklearn/datasets/tests/test_mldata.py
index e6c4e30fb3af1c9446d444c53c19400195942311..a9771f1f64f206cc4d56e093599a151b407defcc 100644
--- a/sklearn/datasets/tests/test_mldata.py
+++ b/sklearn/datasets/tests/test_mldata.py
@@ -2,7 +2,7 @@
 
 from sklearn import datasets
 from sklearn.datasets import mldata_filename, fetch_mldata
-from sklearn.utils.testing import (assert_in, mock_urllib2)
+from sklearn.utils.testing import assert_in, assert_not_in, mock_urllib2
 from nose.tools import assert_equal, assert_raises
 from nose import with_setup
 from numpy.testing import assert_array_equal
@@ -47,7 +47,8 @@ def test_download():
                                              'data': sp.ones((150, 4))}})
     try:
         mock = fetch_mldata('mock', data_home=tmpdir)
-        assert_in(mock, in_=['COL_NAMES', 'DESCR', 'target', 'data'])
+        for n in ["COL_NAMES", "DESCR", "target", "data"]:
+            assert_in(n, mock)
 
         assert_equal(mock.target.shape, (150,))
         assert_equal(mock.data.shape, (150, 4))
@@ -68,7 +69,9 @@ def test_fetch_one_column():
         datasets.mldata.urllib2 = mock_urllib2({dataname: {'x': x}})
 
         dset = fetch_mldata(dataname, data_home=tmpdir)
-        assert_in(dset, in_=['COL_NAMES', 'DESCR', 'data'], out_=['target'])
+        for n in ["COL_NAMES", "DESCR", "data"]:
+            assert_in(n, dset)
+        assert_not_in("target", dset)
 
         assert_equal(dset.data.shape, (2, 3))
         assert_array_equal(dset.data, x)
@@ -98,8 +101,10 @@ def test_fetch_multiple_column():
                                                  ['z', 'data', 'label'])})
 
         dset = fetch_mldata(dataname, data_home=tmpdir)
-        assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'z'],
-                  out_=['x', 'y'])
+        for n in ["COL_NAMES", "DESCR", "target", "data", "z"]:
+            assert_in(n, dset)
+        assert_not_in("x", dset)
+        assert_not_in("y", dset)
 
         assert_array_equal(dset.data, x)
         assert_array_equal(dset.target, y)
@@ -114,8 +119,11 @@ def test_fetch_multiple_column():
                                                  ['y', 'x', 'z'])})
 
         dset = fetch_mldata(dataname, data_home=tmpdir)
-        assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'z'],
-                  out_=['x', 'y'])
+        for n in ["COL_NAMES", "DESCR", "target", "data", "z"]:
+            assert_in(n, dset)
+        assert_not_in("x", dset)
+        assert_not_in("y", dset)
+
         assert_array_equal(dset.data, x)
         assert_array_equal(dset.target, y)
         assert_array_equal(dset.z, z.T)
@@ -130,17 +138,21 @@ def test_fetch_multiple_column():
 
         dset = fetch_mldata(dataname, target_name=2, data_name=0,
                             data_home=tmpdir)
-        assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'x'],
-                  out_=['z', 'y'])
+        for n in ["COL_NAMES", "DESCR", "target", "data", "x"]:
+            assert_in(n, dset)
+        assert_not_in("y", dset)
+        assert_not_in("z", dset)
+
         assert_array_equal(dset.data, z)
         assert_array_equal(dset.target, y)
 
         # by name
         dset = fetch_mldata(dataname, target_name='y', data_name='z',
                             data_home=tmpdir)
-        assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'x'],
-                  out_=['z', 'y'])
-        assert_array_equal(dset.data, z)
-        assert_array_equal(dset.target, y)
+        for n in ["COL_NAMES", "DESCR", "target", "data", "x"]:
+            assert_in(n, dset)
+        assert_not_in("y", dset)
+        assert_not_in("z", dset)
+
     finally:
         datasets.mldata.urllib2 = _urllib2_ref
diff --git a/sklearn/utils/testing.py b/sklearn/utils/testing.py
index df78ad24645d17d9bbbd36c6eeb546dfb6e5d452..2e9ba6165808445d15772c2a2c0f0c82aba504fc 100644
--- a/sklearn/utils/testing.py
+++ b/sklearn/utils/testing.py
@@ -9,15 +9,17 @@ from StringIO import StringIO
 import scipy as sp
 
 
-def assert_in(obj, in_=None, out_=None):
-    """Checks that all names in `in_` as in `obj`, but no name
-    in `out_` is."""
-    if in_ is not None:
-        for name in in_:
-            assert name in obj
-    if out_ is not None:
-        for name in out_:
-            assert name not in obj
+try:
+    from nose.tools import assert_in, assert_not_in
+except ImportError:
+    # Nose < 1.0.0
+    from nose.tools import assert_true, assert_false
+
+    def assert_in(x, container):
+        assert_true(x in container, msg="%r in %r" % (x, container))
+
+    def assert_not_in(x, container):
+        assert_false(x in container, msg="%r in %r" % (x, container))
 
 
 def fake_mldata_cache(columns_dict, dataname, matfile, ordering=None):