diff --git a/doc/datasets/labeled_faces_fixture.py b/doc/datasets/labeled_faces_fixture.py
index 0d13c8ddd80a903f720cc685886ecae647126f3b..45d9d4dfc672e171c3eb59459a3659bee27f8d97 100644
--- a/doc/datasets/labeled_faces_fixture.py
+++ b/doc/datasets/labeled_faces_fixture.py
@@ -5,8 +5,8 @@ and cached in the past.
 """
 from os.path import exists
 from os.path import join
-from nose import SkipTest
 from sklearn.datasets import get_data_home
+from sklearn.utils.testing import SkipTest
 
 
 def setup_module(module):
diff --git a/doc/datasets/twenty_newsgroups_fixture.py b/doc/datasets/twenty_newsgroups_fixture.py
index 0c84b530674084ea4679bc99a862590c3ad7ffa1..09e95d621d021f2c5fa9f49cf4f6e246d398887b 100644
--- a/doc/datasets/twenty_newsgroups_fixture.py
+++ b/doc/datasets/twenty_newsgroups_fixture.py
@@ -5,8 +5,9 @@ and cached in the past.
 """
 from os.path import exists
 from os.path import join
-from nose import SkipTest
+
 from sklearn.datasets import get_data_home
+from sklearn.utils.testing import SkipTest
 
 
 def setup_module(module):
diff --git a/sklearn/cross_decomposition/tests/test_pls.py b/sklearn/cross_decomposition/tests/test_pls.py
index 0a27c9cd983195f18edb67da2e8fd47365da3383..c476b2724792f9fe0bf41149a8232f0aba540817 100644
--- a/sklearn/cross_decomposition/tests/test_pls.py
+++ b/sklearn/cross_decomposition/tests/test_pls.py
@@ -1,10 +1,9 @@
 import numpy as np
-from sklearn.utils.testing import (assert_array_almost_equal,
+from sklearn.utils.testing import (assert_equal, assert_array_almost_equal,
                                    assert_array_equal, assert_true,
                                    assert_raise_message)
 from sklearn.datasets import load_linnerud
 from sklearn.cross_decomposition import pls_, CCA
-from nose.tools import assert_equal
 
 
 def test_pls():
diff --git a/sklearn/datasets/mldata.py b/sklearn/datasets/mldata.py
index c15e12cc7db6353e8b5966c75535109280661c12..82ae9858e9df620d39d6ff869e1c5ac2a5778726 100644
--- a/sklearn/datasets/mldata.py
+++ b/sklearn/datasets/mldata.py
@@ -215,7 +215,7 @@ def fetch_mldata(dataname, target_name='label', data_name='data',
     return Bunch(**dataset)
 
 
-# The following is used by nosetests to setup the docstring tests fixture
+# The following is used by test runners to setup the docstring tests fixture
 
 def setup_module(module):
     # setup mock urllib2 module to avoid downloading from mldata.org
diff --git a/sklearn/datasets/tests/test_base.py b/sklearn/datasets/tests/test_base.py
index 39a9b2ad89500d0e424641c6c716b210dcd39931..92fe96fa106568f0c4124d301e004b08bee4d969 100644
--- a/sklearn/datasets/tests/test_base.py
+++ b/sklearn/datasets/tests/test_base.py
@@ -2,7 +2,6 @@ import os
 import shutil
 import tempfile
 import warnings
-import nose
 import numpy
 from pickle import loads
 from pickle import dumps
@@ -27,6 +26,7 @@ from sklearn.utils.testing import assert_true
 from sklearn.utils.testing import assert_equal
 from sklearn.utils.testing import assert_raises
 from sklearn.utils.testing import assert_array_equal
+from sklearn.utils.testing import with_setup
 
 
 DATA_HOME = tempfile.mkdtemp(prefix="scikit_learn_data_home_test_")
@@ -84,7 +84,7 @@ def test_default_empty_load_files():
     assert_equal(res.DESCR, None)
 
 
-@nose.tools.with_setup(setup_load_files, teardown_load_files)
+@with_setup(setup_load_files, teardown_load_files)
 def test_default_load_files():
     res = load_files(LOAD_FILES_ROOT)
     assert_equal(len(res.filenames), 1)
@@ -93,7 +93,7 @@ def test_default_load_files():
     assert_equal(res.data, [b("Hello World!\n")])
 
 
-@nose.tools.with_setup(setup_load_files, teardown_load_files)
+@with_setup(setup_load_files, teardown_load_files)
 def test_load_files_w_categories_desc_and_encoding():
     category = os.path.abspath(TEST_CATEGORY_DIR1).split('/').pop()
     res = load_files(LOAD_FILES_ROOT, description="test",
@@ -104,7 +104,7 @@ def test_load_files_w_categories_desc_and_encoding():
     assert_equal(res.data, [u("Hello World!\n")])
 
 
-@nose.tools.with_setup(setup_load_files, teardown_load_files)
+@with_setup(setup_load_files, teardown_load_files)
 def test_load_files_wo_load_content():
     res = load_files(LOAD_FILES_ROOT, load_content=False)
     assert_equal(len(res.filenames), 1)
diff --git a/sklearn/decomposition/tests/test_fastica.py b/sklearn/decomposition/tests/test_fastica.py
index e47489e51488822e99da30f9831e97efa03d7e9b..d268cdc4e604734ac6eb96609b802d7678f5b18a 100644
--- a/sklearn/decomposition/tests/test_fastica.py
+++ b/sklearn/decomposition/tests/test_fastica.py
@@ -7,14 +7,13 @@ import warnings
 import numpy as np
 from scipy import stats
 
-from nose.tools import assert_raises
-
 from sklearn.utils.testing import assert_almost_equal
 from sklearn.utils.testing import assert_array_almost_equal
 from sklearn.utils.testing import assert_true
 from sklearn.utils.testing import assert_less
 from sklearn.utils.testing import assert_equal
 from sklearn.utils.testing import assert_warns
+from sklearn.utils.testing import assert_raises
 
 from sklearn.decomposition import FastICA, fastica, PCA
 from sklearn.decomposition.fastica_ import _gs_decorrelation
diff --git a/sklearn/ensemble/tests/test_base.py b/sklearn/ensemble/tests/test_base.py
index 948f94c76f7646533c08eb0ebee63396727d86b9..8484283fcc0a068f1446a59e072fec4d305c3184 100644
--- a/sklearn/ensemble/tests/test_base.py
+++ b/sklearn/ensemble/tests/test_base.py
@@ -7,10 +7,11 @@ Testing for the base module (sklearn.ensemble.base).
 
 import numpy as np
 from numpy.testing import assert_equal
-from nose.tools import assert_true
 
 from sklearn.utils.testing import assert_raise_message
 from sklearn.utils.testing import assert_not_equal
+from sklearn.utils.testing import assert_true
+
 from sklearn.datasets import load_iris
 from sklearn.ensemble import BaggingClassifier
 from sklearn.ensemble.base import _set_random_states
diff --git a/sklearn/ensemble/tests/test_gradient_boosting_loss_functions.py b/sklearn/ensemble/tests/test_gradient_boosting_loss_functions.py
index 8bef99c6ce0129923c700c270a09200c3cdcf5f7..ead2c29b561eb8188287904f1699723d0b2b2cd9 100644
--- a/sklearn/ensemble/tests/test_gradient_boosting_loss_functions.py
+++ b/sklearn/ensemble/tests/test_gradient_boosting_loss_functions.py
@@ -7,9 +7,8 @@ from numpy.testing import assert_array_equal
 from numpy.testing import assert_almost_equal
 from numpy.testing import assert_equal
 
-from nose.tools import assert_raises
-
 from sklearn.utils import check_random_state
+from sklearn.utils.testing import assert_raises
 from sklearn.ensemble.gradient_boosting import BinomialDeviance
 from sklearn.ensemble.gradient_boosting import LogOddsEstimator
 from sklearn.ensemble.gradient_boosting import LeastSquaresError
diff --git a/sklearn/feature_extraction/tests/test_feature_hasher.py b/sklearn/feature_extraction/tests/test_feature_hasher.py
index 34024d59bb1ba82e9a2552e4cd0c02a7e665ba21..c4905b9101ce26e3282b9e527ffcaf0a16a628b8 100644
--- a/sklearn/feature_extraction/tests/test_feature_hasher.py
+++ b/sklearn/feature_extraction/tests/test_feature_hasher.py
@@ -1,11 +1,10 @@
 from __future__ import unicode_literals
 
 import numpy as np
+from numpy.testing import assert_array_equal
 
 from sklearn.feature_extraction import FeatureHasher
-
-from nose.tools import assert_raises, assert_true
-from numpy.testing import assert_array_equal, assert_equal
+from sklearn.utils.testing import assert_raises, assert_true, assert_equal
 
 
 def test_feature_hasher_dicts():
@@ -71,7 +70,7 @@ def test_feature_hasher_pairs_with_string_values():
     x2_nz = np.abs(x2[x2 != 0])
     assert_equal([1], x1_nz)
     assert_equal([1], x2_nz)
-    assert_equal(x1, x2)
+    assert_array_equal(x1, x2)
 
 
 def test_hash_empty_input():
diff --git a/sklearn/feature_extraction/tests/test_image.py b/sklearn/feature_extraction/tests/test_image.py
index 1051f99b1a8fa463eb2d6e3c0b6c112bd28ab438..6c57788efe9046502482838ef044ff4a318e4273 100644
--- a/sklearn/feature_extraction/tests/test_image.py
+++ b/sklearn/feature_extraction/tests/test_image.py
@@ -6,14 +6,13 @@ import numpy as np
 import scipy as sp
 from scipy import ndimage
 
-from nose.tools import assert_equal, assert_true
 from numpy.testing import assert_raises
 
 from sklearn.feature_extraction.image import (
     img_to_graph, grid_to_graph, extract_patches_2d,
     reconstruct_from_patches_2d, PatchExtractor, extract_patches)
 from sklearn.utils.graph import connected_components
-from sklearn.utils.testing import SkipTest
+from sklearn.utils.testing import SkipTest, assert_equal, assert_true
 from sklearn.utils.fixes import sp_version
 
 if sp_version < (0, 12):
diff --git a/sklearn/feature_extraction/tests/test_text.py b/sklearn/feature_extraction/tests/test_text.py
index 6f67f7f416bd2c73096eec477ac5902e91973d86..88382f7d13c0b857b5d0ec646ac47be2ed17ae87 100644
--- a/sklearn/feature_extraction/tests/test_text.py
+++ b/sklearn/feature_extraction/tests/test_text.py
@@ -21,19 +21,15 @@ from sklearn.svm import LinearSVC
 from sklearn.base import clone
 
 import numpy as np
-from nose import SkipTest
-from nose.tools import assert_equal
-from nose.tools import assert_false
-from nose.tools import assert_not_equal
-from nose.tools import assert_true
-from nose.tools import assert_almost_equal
 from numpy.testing import assert_array_almost_equal
 from numpy.testing import assert_array_equal
 from numpy.testing import assert_raises
 from sklearn.utils.random import choice
-from sklearn.utils.testing import (assert_in, assert_less, assert_greater,
+from sklearn.utils.testing import (assert_equal, assert_false, assert_true,
+                                   assert_not_equal, assert_almost_equal,
+                                   assert_in, assert_less, assert_greater,
                                    assert_warns_message, assert_raise_message,
-                                   clean_warning_registry)
+                                   clean_warning_registry, SkipTest)
 
 from collections import defaultdict, Mapping
 from functools import partial
diff --git a/sklearn/feature_selection/tests/test_base.py b/sklearn/feature_selection/tests/test_base.py
index 8374c61ca8ff6811541bb9208846b54310772843..e11b7d94fcebea8c7f010ee3441ea2e60a81a6d8 100644
--- a/sklearn/feature_selection/tests/test_base.py
+++ b/sklearn/feature_selection/tests/test_base.py
@@ -1,12 +1,12 @@
 import numpy as np
 from scipy import sparse as sp
 
-from nose.tools import assert_raises, assert_equal
 from numpy.testing import assert_array_equal
 
 from sklearn.base import BaseEstimator
 from sklearn.feature_selection.base import SelectorMixin
 from sklearn.utils import check_array
+from sklearn.utils.testing import assert_raises, assert_equal
 
 
 class StepSelector(SelectorMixin, BaseEstimator):
diff --git a/sklearn/feature_selection/tests/test_from_model.py b/sklearn/feature_selection/tests/test_from_model.py
index 06dc3d7f425c2815c9de1da207f843a0c49c5eb8..fe170f09ad80c3abc159ec1087beee38a2a8e937 100644
--- a/sklearn/feature_selection/tests/test_from_model.py
+++ b/sklearn/feature_selection/tests/test_from_model.py
@@ -1,13 +1,13 @@
 import numpy as np
 import scipy.sparse as sp
 
-from nose.tools import assert_raises, assert_true
-
+from sklearn.utils.testing import assert_true
 from sklearn.utils.testing import assert_less
 from sklearn.utils.testing import assert_greater
 from sklearn.utils.testing import assert_array_almost_equal
 from sklearn.utils.testing import assert_array_equal
 from sklearn.utils.testing import assert_almost_equal
+from sklearn.utils.testing import assert_raises
 from sklearn.utils.testing import assert_warns
 from sklearn.utils.testing import skip_if_32bit
 
diff --git a/sklearn/feature_selection/tests/test_rfe.py b/sklearn/feature_selection/tests/test_rfe.py
index 4daa2c3b282dd509efbede18aed46a8e4bb3435c..95b29ec3cbd650c9c6b3170332fd4478890a577b 100644
--- a/sklearn/feature_selection/tests/test_rfe.py
+++ b/sklearn/feature_selection/tests/test_rfe.py
@@ -3,7 +3,6 @@ Testing Recursive feature elimination
 """
 import numpy as np
 from numpy.testing import assert_array_almost_equal, assert_array_equal
-from nose.tools import assert_equal, assert_true
 from scipy import sparse
 
 from sklearn.feature_selection.rfe import RFE, RFECV
@@ -15,7 +14,7 @@ from sklearn.model_selection import cross_val_score
 
 from sklearn.utils import check_random_state
 from sklearn.utils.testing import ignore_warnings
-from sklearn.utils.testing import assert_greater
+from sklearn.utils.testing import assert_greater, assert_equal, assert_true
 
 from sklearn.metrics import make_scorer
 from sklearn.metrics import get_scorer
diff --git a/sklearn/gaussian_process/tests/test_gaussian_process.py b/sklearn/gaussian_process/tests/test_gaussian_process.py
index 3de37865c340dbbe6594a464fdc2b5be61972871..916507416ceb09fe1117377f1bc0d719f5f55597 100644
--- a/sklearn/gaussian_process/tests/test_gaussian_process.py
+++ b/sklearn/gaussian_process/tests/test_gaussian_process.py
@@ -5,16 +5,13 @@ Testing for Gaussian Process module (sklearn.gaussian_process)
 # Author: Vincent Dubourg <vincent.dubourg@gmail.com>
 # License: BSD 3 clause
 
-from nose.tools import raises
-from nose.tools import assert_true
-
 import numpy as np
 
 from sklearn.gaussian_process import GaussianProcess
 from sklearn.gaussian_process import regression_models as regression
 from sklearn.gaussian_process import correlation_models as correlation
 from sklearn.datasets import make_regression
-from sklearn.utils.testing import assert_greater
+from sklearn.utils.testing import assert_greater, assert_true, raises
 
 
 f = lambda x: x * np.sin(x)
diff --git a/sklearn/linear_model/tests/test_least_angle.py b/sklearn/linear_model/tests/test_least_angle.py
index 0607a143ccd4bd627762a26836e1cb6cb21920dd..9ebb12c82d19f63981ca15d4709544f6757376e1 100644
--- a/sklearn/linear_model/tests/test_least_angle.py
+++ b/sklearn/linear_model/tests/test_least_angle.py
@@ -1,9 +1,8 @@
-from nose.tools import assert_equal
-
 import numpy as np
 from scipy import linalg
 
 from sklearn.model_selection import train_test_split
+from sklearn.utils.testing import assert_equal
 from sklearn.utils.testing import assert_array_almost_equal
 from sklearn.utils.testing import assert_true
 from sklearn.utils.testing import assert_less
diff --git a/sklearn/linear_model/tests/test_theil_sen.py b/sklearn/linear_model/tests/test_theil_sen.py
index 808650cde66d5d06e7aca34661beacb4a727ea25..279beb8014e9525222adf8417617b0ee133eabef 100644
--- a/sklearn/linear_model/tests/test_theil_sen.py
+++ b/sklearn/linear_model/tests/test_theil_sen.py
@@ -15,12 +15,13 @@ from numpy.testing import assert_array_equal, assert_array_less
 from numpy.testing import assert_array_almost_equal, assert_warns
 from scipy.linalg import norm
 from scipy.optimize import fmin_bfgs
-from nose.tools import raises, assert_almost_equal
 from sklearn.exceptions import ConvergenceWarning
 from sklearn.linear_model import LinearRegression, TheilSenRegressor
 from sklearn.linear_model.theil_sen import _spatial_median, _breakdown_point
 from sklearn.linear_model.theil_sen import _modified_weiszfeld_step
-from sklearn.utils.testing import assert_greater, assert_less
+from sklearn.utils.testing import (
+        assert_almost_equal, assert_greater, assert_less, raises,
+)
 
 
 @contextmanager
diff --git a/sklearn/manifold/tests/test_locally_linear.py b/sklearn/manifold/tests/test_locally_linear.py
index d1052967bc881cfb5a2d1779b508eabdf8911ece..2b5b77d0f38ee6eaa9eff688ab18736e20fd5603 100644
--- a/sklearn/manifold/tests/test_locally_linear.py
+++ b/sklearn/manifold/tests/test_locally_linear.py
@@ -1,5 +1,4 @@
 from itertools import product
-from nose.tools import assert_true
 
 import numpy as np
 from numpy.testing import assert_almost_equal, assert_array_almost_equal
@@ -10,6 +9,8 @@ from sklearn.manifold.locally_linear import barycenter_kneighbors_graph
 from sklearn.utils.testing import assert_less
 from sklearn.utils.testing import ignore_warnings
 from sklearn.utils.testing import assert_raise_message
+from sklearn.utils.testing import assert_raises
+from sklearn.utils.testing import assert_true
 
 eigen_solvers = ['dense', 'arpack']
 
@@ -129,7 +130,6 @@ def test_pipeline():
 
 # Test the error raised when the weight matrix is singular
 def test_singular_matrix():
-    from nose.tools import assert_raises
     M = np.ones((10, 3))
     f = ignore_warnings
     assert_raises(ValueError, f(manifold.locally_linear_embedding),
diff --git a/sklearn/manifold/tests/test_mds.py b/sklearn/manifold/tests/test_mds.py
index a078afd8ca21a498a3571c6c8af21ab368c74f5d..7b432dea1370e22b8590a106c29161e9b1ee7eea 100644
--- a/sklearn/manifold/tests/test_mds.py
+++ b/sklearn/manifold/tests/test_mds.py
@@ -1,8 +1,8 @@
 import numpy as np
 from numpy.testing import assert_array_almost_equal
 
-from nose.tools import assert_raises
 from sklearn.manifold import mds
+from sklearn.utils.testing import assert_raises
 
 
 def test_smacof():
diff --git a/sklearn/manifold/tests/test_spectral_embedding.py b/sklearn/manifold/tests/test_spectral_embedding.py
index facefde56be8c520681447d71f1dc74e88729af5..1ebd753008c5d679c59f79be5ebe691acf59e802 100644
--- a/sklearn/manifold/tests/test_spectral_embedding.py
+++ b/sklearn/manifold/tests/test_spectral_embedding.py
@@ -1,6 +1,3 @@
-from nose.tools import assert_true
-from nose.tools import assert_equal
-
 from scipy.sparse import csr_matrix
 from scipy.sparse import csc_matrix
 from scipy.sparse import coo_matrix
@@ -9,9 +6,6 @@ import numpy as np
 from numpy.testing import assert_array_almost_equal
 from numpy.testing import assert_array_equal
 
-from nose.tools import assert_raises
-from nose.plugins.skip import SkipTest
-
 from sklearn.manifold.spectral_embedding_ import SpectralEmbedding
 from sklearn.manifold.spectral_embedding_ import _graph_is_connected
 from sklearn.manifold.spectral_embedding_ import _graph_connected_component
@@ -22,6 +16,8 @@ from sklearn.cluster import KMeans
 from sklearn.datasets.samples_generator import make_blobs
 from sklearn.utils.graph import graph_laplacian
 from sklearn.utils.extmath import _deterministic_vector_sign_flip
+from sklearn.utils.testing import assert_true, assert_equal, assert_raises
+from sklearn.utils.testing import SkipTest
 
 
 # non centered, sparse centers to check the
diff --git a/sklearn/metrics/cluster/tests/test_supervised.py b/sklearn/metrics/cluster/tests/test_supervised.py
index b50f681fd148008edec1dffe55c16e5c6fdd912c..913c02d87749c1779ad59e12d68caf2756e12172 100644
--- a/sklearn/metrics/cluster/tests/test_supervised.py
+++ b/sklearn/metrics/cluster/tests/test_supervised.py
@@ -1,7 +1,4 @@
 import numpy as np
-from nose.tools import assert_almost_equal
-from nose.tools import assert_equal
-from numpy.testing import assert_array_almost_equal
 
 from sklearn.metrics.cluster import adjusted_mutual_info_score
 from sklearn.metrics.cluster import adjusted_rand_score
@@ -15,7 +12,12 @@ from sklearn.metrics.cluster import homogeneity_score
 from sklearn.metrics.cluster import mutual_info_score
 from sklearn.metrics.cluster import normalized_mutual_info_score
 from sklearn.metrics.cluster import v_measure_score
-from sklearn.utils.testing import assert_raise_message
+
+from sklearn.utils.testing import (
+        assert_equal, assert_almost_equal, assert_raise_message,
+)
+from numpy.testing import assert_array_almost_equal
+
 
 score_funcs = [
     adjusted_rand_score,
diff --git a/sklearn/mixture/tests/test_gmm.py b/sklearn/mixture/tests/test_gmm.py
index 55f0dfb83f225eeb53ec4d9386f06f88ed6acb40..ccbe08906af0cbc69931c089fa9cfc5d589890ee 100644
--- a/sklearn/mixture/tests/test_gmm.py
+++ b/sklearn/mixture/tests/test_gmm.py
@@ -8,15 +8,15 @@ import unittest
 import copy
 import sys
 
-from nose.tools import assert_true
 import numpy as np
 from numpy.testing import (assert_array_equal, assert_array_almost_equal,
                            assert_raises)
 from scipy import stats
 from sklearn import mixture
 from sklearn.datasets.samples_generator import make_spd_matrix
-from sklearn.utils.testing import (assert_greater, assert_raise_message,
-                                   assert_warns_message, ignore_warnings)
+from sklearn.utils.testing import (assert_true, assert_greater,
+                                   assert_raise_message, assert_warns_message,
+                                   ignore_warnings)
 from sklearn.metrics.cluster import adjusted_rand_score
 from sklearn.externals.six.moves import cStringIO as StringIO
 
diff --git a/sklearn/neighbors/tests/test_dist_metrics.py b/sklearn/neighbors/tests/test_dist_metrics.py
index adb5c8e50c32453d79937fcd361b1c762449b78c..9544edbd3d619326f359f5d8ec826dc7402bedbe 100644
--- a/sklearn/neighbors/tests/test_dist_metrics.py
+++ b/sklearn/neighbors/tests/test_dist_metrics.py
@@ -7,7 +7,7 @@ from numpy.testing import assert_array_almost_equal
 import scipy
 from scipy.spatial.distance import cdist
 from sklearn.neighbors.dist_metrics import DistanceMetric
-from nose import SkipTest
+from sklearn.utils.testing import SkipTest
 
 
 def dist_func(x1, x2, p):
diff --git a/sklearn/preprocessing/tests/test_function_transformer.py b/sklearn/preprocessing/tests/test_function_transformer.py
index 6b50793e2dcaa31348f8caf6fb67fa4136f9b1c2..dbac7730d42fde907ad85e8da37c44a656c1f484 100644
--- a/sklearn/preprocessing/tests/test_function_transformer.py
+++ b/sklearn/preprocessing/tests/test_function_transformer.py
@@ -1,8 +1,8 @@
-from nose.tools import assert_equal
 import numpy as np
 
 from sklearn.utils import testing
 from sklearn.preprocessing import FunctionTransformer
+from sklearn.utils.testing import assert_equal, assert_array_equal
 
 
 def _make_func(args_store, kwargs_store, func=lambda X, *a, **k: X):
@@ -21,7 +21,7 @@ def test_delegate_to_func():
     args_store = []
     kwargs_store = {}
     X = np.arange(10).reshape((5, 2))
-    testing.assert_array_equal(
+    assert_array_equal(
         FunctionTransformer(_make_func(args_store, kwargs_store)).transform(X),
         X,
         'transform should have returned X unchanged',
@@ -48,7 +48,7 @@ def test_delegate_to_func():
     kwargs_store.clear()
     y = object()
 
-    testing.assert_array_equal(
+    assert_array_equal(
         FunctionTransformer(
             _make_func(args_store, kwargs_store),
             pass_y=True,
@@ -78,7 +78,7 @@ def test_np_log():
     X = np.arange(10).reshape((5, 2))
 
     # Test that the numpy.log example still works.
-    testing.assert_array_equal(
+    assert_array_equal(
         FunctionTransformer(np.log1p).transform(X),
         np.log1p(X),
     )
@@ -90,8 +90,8 @@ def test_kw_arg():
     F = FunctionTransformer(np.around, kw_args=dict(decimals=3))
 
     # Test that rounding is correct
-    testing.assert_array_equal(F.transform(X),
-                                  np.around(X, decimals=3))
+    assert_array_equal(F.transform(X),
+                       np.around(X, decimals=3))
 
 
 def test_kw_arg_update():
@@ -102,8 +102,7 @@ def test_kw_arg_update():
     F.kw_args['decimals'] = 1
 
     # Test that rounding is correct
-    testing.assert_array_equal(F.transform(X),
-                                  np.around(X, decimals=1))
+    assert_array_equal(F.transform(X), np.around(X, decimals=1))
 
 
 def test_kw_arg_reset():
@@ -114,8 +113,7 @@ def test_kw_arg_reset():
     F.kw_args = dict(decimals=1)
 
     # Test that rounding is correct
-    testing.assert_array_equal(F.transform(X),
-                               np.around(X, decimals=1))
+    assert_array_equal(F.transform(X), np.around(X, decimals=1))
 
 
 def test_inverse_transform():
@@ -123,8 +121,10 @@ def test_inverse_transform():
 
     # Test that inverse_transform works correctly
     F = FunctionTransformer(
-            func=np.sqrt,
-            inverse_func=np.around, inv_kw_args=dict(decimals=3))
-    testing.assert_array_equal(
-            F.inverse_transform(F.transform(X)),
-            np.around(np.sqrt(X), decimals=3))
+        func=np.sqrt,
+        inverse_func=np.around, inv_kw_args=dict(decimals=3),
+    )
+    assert_array_equal(
+        F.inverse_transform(F.transform(X)),
+        np.around(np.sqrt(X), decimals=3),
+    )
diff --git a/sklearn/semi_supervised/tests/test_label_propagation.py b/sklearn/semi_supervised/tests/test_label_propagation.py
index 5a8c1dd80daf822a7e45d9bf9916edf70e9b3eff..81e7dd028bf5d56c8c5eed42e5410150ab22ebf8 100644
--- a/sklearn/semi_supervised/tests/test_label_propagation.py
+++ b/sklearn/semi_supervised/tests/test_label_propagation.py
@@ -1,8 +1,8 @@
 """ test the label propagation module """
 
-import nose
 import numpy as np
 
+from sklearn.utils.testing import assert_equal
 from sklearn.semi_supervised import label_propagation
 from sklearn.metrics.pairwise import rbf_kernel
 from numpy.testing import assert_array_almost_equal
@@ -27,7 +27,7 @@ def test_fit_transduction():
     labels = [0, 1, -1]
     for estimator, parameters in ESTIMATORS:
         clf = estimator(**parameters).fit(samples, labels)
-        nose.tools.assert_equal(clf.transduction_[2], 1)
+        assert_equal(clf.transduction_[2], 1)
 
 
 def test_distribution():
diff --git a/sklearn/svm/tests/test_bounds.py b/sklearn/svm/tests/test_bounds.py
index ddfa79cf3d88f49450323f7e0450e98391333a9f..7a280d22a6a813a53e4bd286dbff495c5cbff794 100644
--- a/sklearn/svm/tests/test_bounds.py
+++ b/sklearn/svm/tests/test_bounds.py
@@ -1,7 +1,3 @@
-import nose
-from nose.tools import assert_equal, assert_true
-from sklearn.utils.testing import clean_warning_registry
-from sklearn.utils.testing import assert_raise_message
 import warnings
 
 import numpy as np
@@ -11,6 +7,9 @@ from sklearn.svm.bounds import l1_min_c
 from sklearn.svm import LinearSVC
 from sklearn.linear_model.logistic import LogisticRegression
 
+from sklearn.utils.testing import assert_true, raises
+from sklearn.utils.testing import assert_raise_message
+
 
 dense_X = [[-1, 0], [0, 1], [1, 1], [1, 1]]
 sparse_X = sp.csr_matrix(dense_X)
@@ -66,13 +65,13 @@ def check_l1_min_c(X, y, loss, fit_intercept=True, intercept_scaling=None):
                 (np.asarray(clf.intercept_) != 0).any())
 
 
-@nose.tools.raises(ValueError)
+@raises(ValueError)
 def test_ill_posed_min_c():
     X = [[0, 0], [0, 0]]
     y = [0, 1]
     l1_min_c(X, y)
 
 
-@nose.tools.raises(ValueError)
+@raises(ValueError)
 def test_unsupported_loss():
     l1_min_c(dense_X, Y1, 'l1')
diff --git a/sklearn/svm/tests/test_sparse.py b/sklearn/svm/tests/test_sparse.py
index 278e7b4e19ddc41548179e8ed4239768635fbc4c..f2c10ceddd0f10733d0d5029b69b57d923dec1c1 100644
--- a/sklearn/svm/tests/test_sparse.py
+++ b/sklearn/svm/tests/test_sparse.py
@@ -1,5 +1,3 @@
-from nose.tools import assert_raises, assert_true, assert_false
-
 import numpy as np
 from scipy import sparse
 from numpy.testing import (assert_array_almost_equal, assert_array_equal,
@@ -10,7 +8,8 @@ from sklearn.datasets import make_classification, load_digits, make_blobs
 from sklearn.svm.tests import test_svm
 from sklearn.exceptions import ConvergenceWarning
 from sklearn.utils.extmath import safe_sparse_dot
-from sklearn.utils.testing import (assert_warns, assert_raise_message,
+from sklearn.utils.testing import (assert_raises, assert_true, assert_false,
+                                   assert_warns, assert_raise_message,
                                    ignore_warnings)
 
 # test sample 1
diff --git a/sklearn/svm/tests/test_svm.py b/sklearn/svm/tests/test_svm.py
index 5befd2331ff3e144a906e77af6ac41b5ce32b22a..33d0e0d6a7cfe836165075ede31bc620fde79b61 100644
--- a/sklearn/svm/tests/test_svm.py
+++ b/sklearn/svm/tests/test_svm.py
@@ -9,17 +9,17 @@ from numpy.testing import assert_array_equal, assert_array_almost_equal
 from numpy.testing import assert_almost_equal
 from numpy.testing import assert_allclose
 from scipy import sparse
-from nose.tools import assert_raises, assert_true, assert_equal, assert_false
 from sklearn import svm, linear_model, datasets, metrics, base
 from sklearn.model_selection import train_test_split
 from sklearn.datasets import make_classification, make_blobs
 from sklearn.metrics import f1_score
 from sklearn.metrics.pairwise import rbf_kernel
 from sklearn.utils import check_random_state
+from sklearn.utils.testing import assert_equal, assert_true, assert_false
 from sklearn.utils.testing import assert_greater, assert_in, assert_less
 from sklearn.utils.testing import assert_raises_regexp, assert_warns
 from sklearn.utils.testing import assert_warns_message, assert_raise_message
-from sklearn.utils.testing import ignore_warnings
+from sklearn.utils.testing import ignore_warnings, assert_raises
 from sklearn.exceptions import ChangedBehaviorWarning
 from sklearn.exceptions import ConvergenceWarning
 from sklearn.exceptions import NotFittedError
diff --git a/sklearn/tests/test_discriminant_analysis.py b/sklearn/tests/test_discriminant_analysis.py
index 2312da24402ce7df47ad7bb2b20fd4e129836474..24b7a1340526f4f06008726c3cc85319ee357f35 100644
--- a/sklearn/tests/test_discriminant_analysis.py
+++ b/sklearn/tests/test_discriminant_analysis.py
@@ -1,6 +1,5 @@
 import sys
 import numpy as np
-from nose import SkipTest
 
 from sklearn.utils.testing import assert_array_equal
 from sklearn.utils.testing import assert_array_almost_equal
@@ -12,6 +11,7 @@ from sklearn.utils.testing import assert_raise_message
 from sklearn.utils.testing import assert_warns
 from sklearn.utils.testing import assert_greater
 from sklearn.utils.testing import ignore_warnings
+from sklearn.utils.testing import SkipTest
 
 from sklearn.datasets import make_blobs
 from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
diff --git a/sklearn/tree/tests/test_export.py b/sklearn/tree/tests/test_export.py
index e35c3fd88931e4b487042db944e400d914fe3ddf..1379a7703f31fca005ae0234bf903875034ad96b 100644
--- a/sklearn/tree/tests/test_export.py
+++ b/sklearn/tree/tests/test_export.py
@@ -4,14 +4,11 @@ Testing for export functions of decision trees (sklearn.tree.export).
 
 from re import finditer
 
-from numpy.testing import assert_equal
-from nose.tools import assert_raises
-
 from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
 from sklearn.ensemble import GradientBoostingClassifier
 from sklearn.tree import export_graphviz
 from sklearn.externals.six import StringIO
-from sklearn.utils.testing import assert_in
+from sklearn.utils.testing import assert_in, assert_equal, assert_raises
 
 # toy sample
 X = [[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1]]
diff --git a/sklearn/utils/sparsetools/tests/test_traversal.py b/sklearn/utils/sparsetools/tests/test_traversal.py
index 9b42a6211807375c9b74995802fec421d4de485c..6a0e96829b3b03a091e5894424031ce1f3bd81a7 100644
--- a/sklearn/utils/sparsetools/tests/test_traversal.py
+++ b/sklearn/utils/sparsetools/tests/test_traversal.py
@@ -1,9 +1,9 @@
 from __future__ import division, print_function, absolute_import
 
-from nose import SkipTest
-
 import numpy as np
 from numpy.testing import assert_array_almost_equal
+from sklearn.utils.testing import SkipTest
+
 try:
     from scipy.sparse.csgraph import breadth_first_tree, depth_first_tree,\
         csgraph_to_dense, csgraph_from_dense
diff --git a/sklearn/utils/testing.py b/sklearn/utils/testing.py
index b460f83eccd76fb76c0c916af6e5b5a740f642a4..1146b4f645048b1e6b1b00cea17535329c25fbb8 100644
--- a/sklearn/utils/testing.py
+++ b/sklearn/utils/testing.py
@@ -36,6 +36,7 @@ import tempfile
 import shutil
 import os.path as op
 import atexit
+import unittest
 
 # WindowsError only exist on Windows
 try:
@@ -47,19 +48,7 @@ import sklearn
 from sklearn.base import BaseEstimator
 from sklearn.externals import joblib
 
-# Conveniently import all assertions in one place.
-from nose.tools import assert_equal
-from nose.tools import assert_not_equal
-from nose.tools import assert_true
-from nose.tools import assert_false
-from nose.tools import assert_raises
 from nose.tools import raises
-try:
-    from nose.tools import assert_dict_equal
-except ImportError:
-    # Not in old versions of nose, but is only for formatting anyway
-    assert_dict_equal = assert_equal
-from nose import SkipTest
 from nose import with_setup
 
 from numpy.testing import assert_almost_equal
@@ -79,13 +68,31 @@ __all__ = ["assert_equal", "assert_not_equal", "assert_raises",
            "assert_array_almost_equal", "assert_array_less",
            "assert_less", "assert_less_equal",
            "assert_greater", "assert_greater_equal",
-           "assert_approx_equal"]
+           "assert_approx_equal", "SkipTest"]
+
 
+_dummy = unittest.TestCase('__init__')
+assert_equal = _dummy.assertEqual
+assert_not_equal = _dummy.assertNotEqual
+assert_true = _dummy.assertTrue
+assert_false = _dummy.assertFalse
+assert_raises = _dummy.assertRaises
 
 try:
-    from nose.tools import assert_in, assert_not_in
-except ImportError:
-    # Nose < 1.0.0
+    SkipTest = unittest.case.SkipTest
+except AttributeError:
+    # Python <= 2.6, we stil need nose here
+    from nose import SkipTest
+
+
+try:
+    assert_dict_equal = _dummy.assertDictEqual
+    assert_in = _dummy.assertIn
+    assert_not_in = _dummy.assertNotIn
+except AttributeError:
+    # Python <= 2.6
+
+    assert_dict_equal = assert_equal
 
     def assert_in(x, container):
         assert_true(x in container, msg="%r in %r" % (x, container))
@@ -94,9 +101,9 @@ except ImportError:
         assert_false(x in container, msg="%r in %r" % (x, container))
 
 try:
-    from nose.tools import assert_raises_regex
-except ImportError:
-    # for Python 2
+    assert_raises_regex = _dummy.assertRaisesRegex
+except AttributeError:
+    # for Python 2.6
     def assert_raises_regex(expected_exception, expected_regexp,
                             callable_obj=None, *args, **kwargs):
         """Helper function to check for message patterns in exceptions."""
@@ -378,13 +385,10 @@ class _IgnoreWarnings(object):
 
 
 try:
-    from nose.tools import assert_less
-except ImportError:
+    assert_less = _dummy.assertLess
+    assert_greater = _dummy.assertGreater
+except AttributeError:
     assert_less = _assert_less
-
-try:
-    from nose.tools import assert_greater
-except ImportError:
     assert_greater = _assert_greater
 
 
diff --git a/sklearn/utils/tests/test_bench.py b/sklearn/utils/tests/test_bench.py
index 102d71d7abd51ab05956bd43bbb128f6c7d7fff5..c04ba4ad25eba755ec2638980951afd81bc86010 100644
--- a/sklearn/utils/tests/test_bench.py
+++ b/sklearn/utils/tests/test_bench.py
@@ -2,7 +2,7 @@
 import datetime
 
 from sklearn.utils.bench import total_seconds
-from nose.tools import assert_equal
+from sklearn.utils.testing import assert_equal
 
 
 def test_total_seconds():
diff --git a/sklearn/utils/tests/test_fast_dict.py b/sklearn/utils/tests/test_fast_dict.py
index 19923124e8827e9501931069ae9772589f5f8970..1b0b0fd68e0862a8b87000ac807b51522ce65527 100644
--- a/sklearn/utils/tests/test_fast_dict.py
+++ b/sklearn/utils/tests/test_fast_dict.py
@@ -1,11 +1,12 @@
 """ Test fast_dict.
 """
 import numpy as np
-from nose.tools import assert_equal
 
 from sklearn.utils.fast_dict import IntFloatDict, argmin
+from sklearn.utils.testing import assert_equal
 from sklearn.externals.six.moves import xrange
 
+
 def test_int_float_dict():
     rng = np.random.RandomState(0)
     keys = np.unique(rng.randint(100, size=10).astype(np.intp))
diff --git a/sklearn/utils/tests/test_fixes.py b/sklearn/utils/tests/test_fixes.py
index 4494f87b5feb4c523cf352d46566c72f0817687e..f5817f246b908a5037daa8934549f95c7cc8ae73 100644
--- a/sklearn/utils/tests/test_fixes.py
+++ b/sklearn/utils/tests/test_fixes.py
@@ -5,14 +5,11 @@
 
 import numpy as np
 
-from nose.tools import assert_equal
-from nose.tools import assert_false
-from nose.tools import assert_true
 from numpy.testing import (assert_almost_equal,
                            assert_array_almost_equal)
-
 from sklearn.utils.fixes import divide, expit
 from sklearn.utils.fixes import astype
+from sklearn.utils.testing import assert_equal, assert_false, assert_true
 
 
 def test_expit():
diff --git a/sklearn/utils/tests/test_metaestimators.py b/sklearn/utils/tests/test_metaestimators.py
index d73c67d0d19832d26f3602c8d8c68a535bbd2a5d..2a016ebefa5651a7590987f1de21a0048ff08627 100644
--- a/sklearn/utils/tests/test_metaestimators.py
+++ b/sklearn/utils/tests/test_metaestimators.py
@@ -1,4 +1,4 @@
-from nose.tools import assert_true, assert_false
+from sklearn.utils.testing import assert_true, assert_false
 from sklearn.utils.metaestimators import if_delegate_has_method
 
 
diff --git a/sklearn/utils/tests/test_murmurhash.py b/sklearn/utils/tests/test_murmurhash.py
index f92cb4a80bdb30481c90b1fba1351035026b7072..f51c5f7e26c3c2d0aa2a911594e95921796d0f4e 100644
--- a/sklearn/utils/tests/test_murmurhash.py
+++ b/sklearn/utils/tests/test_murmurhash.py
@@ -7,7 +7,7 @@ from sklearn.externals.six import b, u
 from sklearn.utils.murmurhash import murmurhash3_32
 from numpy.testing import assert_array_almost_equal
 from numpy.testing import assert_array_equal
-from nose.tools import assert_equal, assert_true
+from sklearn.utils.testing import assert_equal, assert_true
 
 
 def test_mmhash3_int():
diff --git a/sklearn/utils/tests/test_seq_dataset.py b/sklearn/utils/tests/test_seq_dataset.py
index fad7e3abcb546882c5751e3b4661a08d4904a118..aaa3e43fc9938919ff04778855bbc750407072ac 100644
--- a/sklearn/utils/tests/test_seq_dataset.py
+++ b/sklearn/utils/tests/test_seq_dataset.py
@@ -3,13 +3,13 @@
 # License: BSD 3 clause
 
 import numpy as np
+from numpy.testing import assert_array_equal
 import scipy.sparse as sp
 
 from sklearn.utils.seq_dataset import ArrayDataset, CSRDataset
 from sklearn.datasets import load_iris
 
-from numpy.testing import assert_array_equal
-from nose.tools import assert_equal
+from sklearn.utils.testing import assert_equal
 
 iris = load_iris()
 X = iris.data.astype(np.float64)
diff --git a/sklearn/utils/tests/test_testing.py b/sklearn/utils/tests/test_testing.py
index ea76333a6eafcb2d9e1d359baeb75f7eaa5707b8..17e9209dbce851dd86bd99116e202ea8873d0ecd 100644
--- a/sklearn/utils/tests/test_testing.py
+++ b/sklearn/utils/tests/test_testing.py
@@ -2,9 +2,8 @@ import warnings
 import unittest
 import sys
 
-from nose.tools import assert_raises
-
 from sklearn.utils.testing import (
+    assert_raises,
     _assert_less,
     _assert_greater,
     assert_less_equal,
diff --git a/sklearn/utils/tests/test_validation.py b/sklearn/utils/tests/test_validation.py
index a6268b08d1a818b10dfccd983957731420eefadd..9c57ab4e96de88dbd119f70726fd10e9c5363215 100644
--- a/sklearn/utils/tests/test_validation.py
+++ b/sklearn/utils/tests/test_validation.py
@@ -8,9 +8,9 @@ from itertools import product
 import numpy as np
 from numpy.testing import assert_array_equal
 import scipy.sparse as sp
-from nose.tools import assert_raises, assert_true, assert_false, assert_equal
 
-from sklearn.utils.testing import assert_raises_regexp
+from sklearn.utils.testing import assert_true, assert_false, assert_equal
+from sklearn.utils.testing import assert_raises, assert_raises_regexp
 from sklearn.utils.testing import assert_no_warnings
 from sklearn.utils.testing import assert_warns_message
 from sklearn.utils.testing import assert_warns