diff --git a/containers/dockerfile-template b/containers/dockerfile-template
index fc74e7a08d623cbf6d82957f5ce3466c5b4f1e6a..939ba29ca01b0f263f4c4c2b4e25dceb7533201f 100644
--- a/containers/dockerfile-template
+++ b/containers/dockerfile-template
@@ -14,7 +14,7 @@ RUN conda info
 RUN python --version
 
 # Install conda-installable programs
-RUN conda install -n ${{conda_env}} -y matplotlib numpy scipy pandas astropy flake8 mock
+RUN conda install -n ${{conda_env}} -y matplotlib numpy scipy pandas astropy flake8
 RUN conda install -n ${{conda_env}} -c anaconda coverage configargparse future
 RUN conda install -n ${{conda_env}} -c conda-forge black pytest-cov deepdish arviz
 
diff --git a/containers/v3-dockerfile-test-suite-python38 b/containers/v3-dockerfile-test-suite-python38
index e5724e0c884428442c68aff473dab1438d80ee01..080f1fd2274b8fab1e500f47a20a050abd47adcb 100644
--- a/containers/v3-dockerfile-test-suite-python38
+++ b/containers/v3-dockerfile-test-suite-python38
@@ -16,7 +16,7 @@ RUN conda info
 RUN python --version
 
 # Install conda-installable programs
-RUN conda install -n ${conda_env} -y matplotlib numpy scipy pandas astropy flake8 mock
+RUN conda install -n ${conda_env} -y matplotlib numpy scipy pandas astropy flake8
 RUN conda install -n ${conda_env} -c anaconda coverage configargparse future
 RUN conda install -n ${conda_env} -c conda-forge black pytest-cov deepdish arviz
 
diff --git a/containers/v3-dockerfile-test-suite-python39 b/containers/v3-dockerfile-test-suite-python39
index 106cd4573d5d57c832bf54b686a92d0a0fe94064..91b906ef83badb352d0e26edf70b271ab2cda2a1 100644
--- a/containers/v3-dockerfile-test-suite-python39
+++ b/containers/v3-dockerfile-test-suite-python39
@@ -16,7 +16,7 @@ RUN conda info
 RUN python --version
 
 # Install conda-installable programs
-RUN conda install -n ${conda_env} -y matplotlib numpy scipy pandas astropy flake8 mock
+RUN conda install -n ${conda_env} -y matplotlib numpy scipy pandas astropy flake8
 RUN conda install -n ${conda_env} -c anaconda coverage configargparse future
 RUN conda install -n ${conda_env} -c conda-forge black pytest-cov deepdish arviz
 
diff --git a/requirements.txt b/requirements.txt
index 99b3eedbbf9e86b09300ce89e8b466e824c62536..e23d0a0cb1c11eaedf40c4390456148c84a7673e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,7 +5,6 @@ numpy
 matplotlib>=2.1
 scipy>=1.5
 pandas
-mock
 dill
 tqdm
 h5py
diff --git a/test/core/likelihood_test.py b/test/core/likelihood_test.py
index a3adfa926490ebcc6a8965932aa7d2fd28a4ac5f..d5a0e296865bc66fc3b052bd8019d05f8a76f154 100644
--- a/test/core/likelihood_test.py
+++ b/test/core/likelihood_test.py
@@ -1,6 +1,5 @@
 import unittest
-from mock import MagicMock
-import mock
+from unittest import mock
 import numpy as np
 from bilby.core.likelihood import (
     Likelihood,
@@ -657,9 +656,9 @@ class TestJointLikelihood(unittest.TestCase):
         )
 
     def test_log_noise_likelihood(self):
-        self.first_likelihood.noise_log_likelihood = MagicMock(return_value=1)
-        self.second_likelihood.noise_log_likelihood = MagicMock(return_value=2)
-        self.third_likelihood.noise_log_likelihood = MagicMock(return_value=3)
+        self.first_likelihood.noise_log_likelihood = mock.MagicMock(return_value=1)
+        self.second_likelihood.noise_log_likelihood = mock.MagicMock(return_value=2)
+        self.third_likelihood.noise_log_likelihood = mock.MagicMock(return_value=3)
         self.joint_likelihood = JointLikelihood(
             self.first_likelihood, self.second_likelihood, self.third_likelihood
         )
diff --git a/test/core/prior/base_test.py b/test/core/prior/base_test.py
index 49887de5032580096b1acdf321f5a83534ab5d3c..c9b7887320d76a3042d96693f1d1503e5ebae796 100644
--- a/test/core/prior/base_test.py
+++ b/test/core/prior/base_test.py
@@ -1,7 +1,7 @@
 import unittest
+from unittest.mock import Mock
 
 import numpy as np
-from mock import Mock
 
 import bilby
 
diff --git a/test/core/prior/conditional_test.py b/test/core/prior/conditional_test.py
index 3e2c5d051cedfe93ee401424020ee5958e98d7a9..3f7e8873169572ab0d6a096c6ddc8ad4f67078d2 100644
--- a/test/core/prior/conditional_test.py
+++ b/test/core/prior/conditional_test.py
@@ -1,6 +1,6 @@
 import unittest
+from unittest import mock
 
-import mock
 import numpy as np
 
 import bilby
diff --git a/test/core/prior/dict_test.py b/test/core/prior/dict_test.py
index 03881612a61404db58ebc43d2944fc833480643b..0a421336be0d4d90bbf694f02aba07f4a636a741 100644
--- a/test/core/prior/dict_test.py
+++ b/test/core/prior/dict_test.py
@@ -1,8 +1,8 @@
 import os
 import unittest
+from unittest.mock import Mock
 
 import numpy as np
-from mock import Mock
 
 import bilby
 
diff --git a/test/core/sampler/base_sampler_test.py b/test/core/sampler/base_sampler_test.py
index d14eeaa4998b4f36b318029edb9f0b3d5c49c597..30be5e2ba542205d4cdbef10c6f8e9d681bcbbf1 100644
--- a/test/core/sampler/base_sampler_test.py
+++ b/test/core/sampler/base_sampler_test.py
@@ -1,9 +1,9 @@
 import copy
 import os
 import unittest
+from unittest.mock import MagicMock
 
 import numpy as np
-from mock import MagicMock
 
 import bilby
 from bilby.core import prior
diff --git a/test/core/sampler/cpnest_test.py b/test/core/sampler/cpnest_test.py
index 569e00c0365153795d515e360284e15fa573858a..08a23b0a85276818423f83c583765ac5f6721547 100644
--- a/test/core/sampler/cpnest_test.py
+++ b/test/core/sampler/cpnest_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/dnest4_test.py b/test/core/sampler/dnest4_test.py
index fc67a0f8f3dbe1c37e6301bce95ef69e9fae6570..dac5289f68ec775e1a00189a85244200b85891f8 100644
--- a/test/core/sampler/dnest4_test.py
+++ b/test/core/sampler/dnest4_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/dynesty_test.py b/test/core/sampler/dynesty_test.py
index 2b5ae1f0771c2bf7b8c1d4532af5d0d3f07b8830..d1c42b099a86e4fa69b7d47319a99af43808d241 100644
--- a/test/core/sampler/dynesty_test.py
+++ b/test/core/sampler/dynesty_test.py
@@ -1,7 +1,7 @@
 import unittest
+from unittest.mock import MagicMock
 
 import numpy as np
-from mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/emcee_test.py b/test/core/sampler/emcee_test.py
index 9a81d073f8c0e1086e43e0e50e55e4423e6fce49..66265e51e44797123a90b77193137c8e1fba4c2b 100644
--- a/test/core/sampler/emcee_test.py
+++ b/test/core/sampler/emcee_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/kombine_test.py b/test/core/sampler/kombine_test.py
index f4bdc80303f474c223ffae513fb5f4b05ff46dfe..d16eb8c90c7f11f6cf4280e00f8ca0c8e5ebb1a3 100644
--- a/test/core/sampler/kombine_test.py
+++ b/test/core/sampler/kombine_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/nessai_test.py b/test/core/sampler/nessai_test.py
index 6f902f71d8f8e43a53c824345356bdd389eaa922..86b03fb38e74afb5ce75c06b5fbd91add3d7f49e 100644
--- a/test/core/sampler/nessai_test.py
+++ b/test/core/sampler/nessai_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock, patch, mock_open
+from unittest.mock import MagicMock, patch, mock_open
 
 import bilby
 
diff --git a/test/core/sampler/nestle_test.py b/test/core/sampler/nestle_test.py
index 5be3ac8d8076d9e1704c358123ca44183155fa92..e5623ef336552a0b3ba8936c49d8704fad22ee0d 100644
--- a/test/core/sampler/nestle_test.py
+++ b/test/core/sampler/nestle_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/polychord_test.py b/test/core/sampler/polychord_test.py
index 8427315ac49c3faeed40996463b678f7a530e885..88193a83a0cf3b0c644f63f728a1356f79ccfb46 100644
--- a/test/core/sampler/polychord_test.py
+++ b/test/core/sampler/polychord_test.py
@@ -1,7 +1,7 @@
 import unittest
+from unittest.mock import MagicMock
 
 import numpy as np
-from mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/proposal_test.py b/test/core/sampler/proposal_test.py
index 6b1f5b7747cb6d2df0cce4b03dbf8f0d94afde63..ce678d3fe1d1fdaa5a2750c664a3e6d7a284377f 100644
--- a/test/core/sampler/proposal_test.py
+++ b/test/core/sampler/proposal_test.py
@@ -1,5 +1,5 @@
 import unittest
-import mock
+from unittest import mock
 import random
 
 import numpy as np
diff --git a/test/core/sampler/ptemcee_test.py b/test/core/sampler/ptemcee_test.py
index 08439c814878878583d191b2170a5ac36a5e751b..2bc4d6580f889285d736031bd09c143d238086a0 100644
--- a/test/core/sampler/ptemcee_test.py
+++ b/test/core/sampler/ptemcee_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/pymc3_test.py b/test/core/sampler/pymc3_test.py
index 9978327a95f6a9c37ea36cb9717d2dc0a757c9c2..b3bb758d3270602debdda62f12e6279f9c48d534 100644
--- a/test/core/sampler/pymc3_test.py
+++ b/test/core/sampler/pymc3_test.py
@@ -1,7 +1,7 @@
 import unittest
-import pytest
+from unittest.mock import MagicMock
 
-from mock import MagicMock
+import pytest
 
 import bilby
 
diff --git a/test/core/sampler/pymultinest_test.py b/test/core/sampler/pymultinest_test.py
index 41c3de4077e578e33bb6e65f9a19efade1cff424..8ffcef6745b89ed350dd1bc00a784b5e9999585d 100644
--- a/test/core/sampler/pymultinest_test.py
+++ b/test/core/sampler/pymultinest_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/ultranest_test.py b/test/core/sampler/ultranest_test.py
index e70a70fdfb7785bd2457c01ee6399d022e88a91e..dc578cd71932c877f0de8414361781cc86837789 100644
--- a/test/core/sampler/ultranest_test.py
+++ b/test/core/sampler/ultranest_test.py
@@ -1,7 +1,6 @@
 import shutil
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/core/sampler/zeus_test.py b/test/core/sampler/zeus_test.py
index e7bd9289cf5e3115a017c8eeae50e21b99c12ed8..2b3e2b5dea14dfe19c6b8930bb353d6871d73409 100644
--- a/test/core/sampler/zeus_test.py
+++ b/test/core/sampler/zeus_test.py
@@ -1,6 +1,5 @@
 import unittest
-
-from mock import MagicMock
+from unittest.mock import MagicMock
 
 import bilby
 
diff --git a/test/gw/detector/geometry_test.py b/test/gw/detector/geometry_test.py
index b05b67459fc65abeb46ed32d6e0dea64d2e18bf8..3960c196471dfe4fd6856f0ecebd2aafc401f187 100644
--- a/test/gw/detector/geometry_test.py
+++ b/test/gw/detector/geometry_test.py
@@ -1,8 +1,7 @@
 import unittest
+from unittest import mock
 
-import mock
 import numpy as np
-from mock import MagicMock
 
 import bilby
 
@@ -89,53 +88,53 @@ class TestInterferometerGeometry(unittest.TestCase):
 
     def test_x_without_update(self):
         _ = self.geometry.x
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
 
         self.assertFalse(np.array_equal(self.geometry.x, np.array([1])))
 
     def test_x_with_xarm_tilt_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.xarm_tilt = 0
         self.assertTrue(np.array_equal(self.geometry.x, np.array([1])))
 
     def test_x_with_xarm_azimuth_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.xarm_azimuth = 0
         self.assertTrue(np.array_equal(self.geometry.x, np.array([1])))
 
     def test_x_with_longitude_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.longitude = 0
         self.assertTrue(np.array_equal(self.geometry.x, np.array([1])))
 
     def test_x_with_latitude_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.latitude = 0
         self.assertTrue(np.array_equal(self.geometry.x, np.array([1])))
 
     def test_y_without_update(self):
         _ = self.geometry.y
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
 
         self.assertFalse(np.array_equal(self.geometry.y, np.array([1])))
 
     def test_y_with_yarm_tilt_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.yarm_tilt = 0
         self.assertTrue(np.array_equal(self.geometry.y, np.array([1])))
 
     def test_y_with_yarm_azimuth_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.yarm_azimuth = 0
         self.assertTrue(np.array_equal(self.geometry.y, np.array([1])))
 
     def test_y_with_longitude_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.longitude = 0
         self.assertTrue(np.array_equal(self.geometry.y, np.array([1])))
 
     def test_y_with_latitude_update(self):
-        self.geometry.unit_vector_along_arm = MagicMock(return_value=np.array([1]))
+        self.geometry.unit_vector_along_arm = mock.MagicMock(return_value=np.array([1]))
         self.geometry.latitude = 0
         self.assertTrue(np.array_equal(self.geometry.y, np.array([1])))
 
diff --git a/test/gw/detector/interferometer_test.py b/test/gw/detector/interferometer_test.py
index fe17dd5554cefeecd425a09afb2ebcd2693e8688..2a37830fcfec33bd1dab8e8df1cca41e4b9c4ca1 100644
--- a/test/gw/detector/interferometer_test.py
+++ b/test/gw/detector/interferometer_test.py
@@ -1,4 +1,5 @@
 import unittest
+from unittest import mock
 
 import lal
 import lalsimulation
@@ -7,9 +8,7 @@ from packaging import version
 from shutil import rmtree
 
 import deepdish as dd
-import mock
 import numpy as np
-from mock import MagicMock, patch
 import pandas
 
 import bilby
@@ -56,7 +55,7 @@ class TestInterferometer(unittest.TestCase):
         self.injection_polarizations["plus"] = np.random.random(4097)
         self.injection_polarizations["cross"] = np.random.random(4097)
 
-        self.waveform_generator = MagicMock()
+        self.waveform_generator = mock.MagicMock()
         self.wg_polarizations = dict(
             plus=np.random.random(4097), cross=np.random.random(4097)
         )
@@ -118,8 +117,8 @@ class TestInterferometer(unittest.TestCase):
             )
 
     def test_get_detector_response_default_behaviour(self):
-        self.ifo.antenna_response = MagicMock(return_value=1)
-        self.ifo.time_delay_from_geocenter = MagicMock(return_value=0)
+        self.ifo.antenna_response = mock.MagicMock(return_value=1)
+        self.ifo.time_delay_from_geocenter = mock.MagicMock(return_value=0)
         self.ifo.epoch = 0
         self.minimum_frequency = 10
         self.maximum_frequency = 20
@@ -134,8 +133,8 @@ class TestInterferometer(unittest.TestCase):
         )
 
     def test_get_detector_response_with_dt(self):
-        self.ifo.antenna_response = MagicMock(return_value=1)
-        self.ifo.time_delay_from_geocenter = MagicMock(return_value=0)
+        self.ifo.antenna_response = mock.MagicMock(return_value=1)
+        self.ifo.time_delay_from_geocenter = mock.MagicMock(return_value=0)
         self.ifo.epoch = 1
         self.minimum_frequency = 10
         self.maximum_frequency = 20
@@ -152,8 +151,8 @@ class TestInterferometer(unittest.TestCase):
         self.assertTrue(np.allclose(abs(expected_response), abs(response)))
 
     def test_get_detector_response_multiple_modes(self):
-        self.ifo.antenna_response = MagicMock(return_value=1)
-        self.ifo.time_delay_from_geocenter = MagicMock(return_value=0)
+        self.ifo.antenna_response = mock.MagicMock(return_value=1)
+        self.ifo.time_delay_from_geocenter = mock.MagicMock(return_value=0)
         self.ifo.epoch = 0
         self.minimum_frequency = 10
         self.maximum_frequency = 20
@@ -227,7 +226,7 @@ class TestInterferometer(unittest.TestCase):
                 injection_polarizations=self.injection_polarizations,
             )
 
-    @patch.object(bilby.core.utils.logger, "warning")
+    @mock.patch.object(bilby.core.utils.logger, "warning")
     def test_inject_signal_outside_segment_logs_warning(self, m):
         self.parameters["geocent_time"] = 24345.0
         self.ifo.get_detector_response = lambda x, params: x["plus"] + x["cross"]
@@ -253,7 +252,7 @@ class TestInterferometer(unittest.TestCase):
             )
         )
 
-    @patch.object(
+    @mock.patch.object(
         bilby.gw.detector.Interferometer, "inject_signal_from_waveform_generator"
     )
     def test_inject_signal_with_waveform_generator_correct_call(self, m):
@@ -296,7 +295,7 @@ class TestInterferometer(unittest.TestCase):
             np.array_equal(expected, self.ifo.strain_data._frequency_domain_strain)
         )
 
-    @patch.object(
+    @mock.patch.object(
         bilby.gw.detector.Interferometer, "inject_signal_from_waveform_polarizations"
     )
     def test_inject_signal_with_injection_polarizations_and_waveform_generator(self, m):
diff --git a/test/gw/detector/networks_test.py b/test/gw/detector/networks_test.py
index 6108c3e4ebcacca8b6bf39e8d4c1c6a3b12c9bcf..971254b24f425a79e333fda6a57c464d75dfbbf2 100644
--- a/test/gw/detector/networks_test.py
+++ b/test/gw/detector/networks_test.py
@@ -1,13 +1,12 @@
 import unittest
+from unittest import mock
 import pytest
 from shutil import rmtree
 from packaging import version
 from itertools import combinations
 
 import deepdish as dd
-import mock
 import numpy as np
-from mock import patch, MagicMock
 import pandas
 
 import bilby
@@ -183,7 +182,7 @@ class TestInterferometerList(unittest.TestCase):
         with self.assertRaises(ValueError):
             bilby.gw.detector.InterferometerList([self.ifo1, self.ifo2])
 
-    @patch.object(bilby.gw.detector.networks.logger, "warning")
+    @mock.patch.object(bilby.gw.detector.networks.logger, "warning")
     def test_check_interferometers_relative_tolerance(self, mock_warning):
         # Value larger than relative tolerance -- not tolerated
         self.ifo2.strain_data.start_time = self.ifo1.strain_data.start_time + 1e-4
@@ -201,7 +200,7 @@ class TestInterferometerList(unittest.TestCase):
             "The start_time of all interferometers are not the same:" in warning_log_str
         )
 
-    @patch.object(
+    @mock.patch.object(
         bilby.gw.detector.Interferometer, "set_strain_data_from_power_spectral_density"
     )
     def test_set_strain_data_from_power_spectral_density(self, m):
@@ -224,21 +223,21 @@ class TestInterferometerList(unittest.TestCase):
         meta_data = {ifo.name: ifo.meta_data for ifo in ifos_list}
         self.assertEqual(ifos.meta_data, meta_data)
 
-    @patch.object(
+    @mock.patch.object(
         bilby.gw.waveform_generator.WaveformGenerator, "frequency_domain_strain"
     )
     def test_inject_signal_pol_none_calls_frequency_domain_strain(self, m):
         waveform_generator = bilby.gw.waveform_generator.WaveformGenerator(
             frequency_domain_source_model=lambda x, y, z: x
         )
-        self.ifo1.inject_signal = MagicMock(return_value=None)
-        self.ifo2.inject_signal = MagicMock(return_value=None)
+        self.ifo1.inject_signal = mock.MagicMock(return_value=None)
+        self.ifo2.inject_signal = mock.MagicMock(return_value=None)
         self.ifo_list.inject_signal(
             parameters=None, waveform_generator=waveform_generator
         )
         self.assertTrue(m.called)
 
-    @patch.object(bilby.gw.detector.Interferometer, "inject_signal")
+    @mock.patch.object(bilby.gw.detector.Interferometer, "inject_signal")
     def test_inject_signal_with_inj_pol(self, m):
         self.ifo_list.inject_signal(
             injection_polarizations=dict(plus=1), raise_error=False
@@ -248,7 +247,7 @@ class TestInterferometerList(unittest.TestCase):
         )
         self.assertEqual(len(self.ifo_list), m.call_count)
 
-    @patch.object(bilby.gw.detector.Interferometer, "inject_signal")
+    @mock.patch.object(bilby.gw.detector.Interferometer, "inject_signal")
     def test_inject_signal_returns_expected_polarisations(self, m):
         m.return_value = dict(plus=1, cross=2)
         injection_polarizations = dict(plus=1, cross=2)
@@ -264,7 +263,7 @@ class TestInterferometerList(unittest.TestCase):
             ifos_pol[1],
         )
 
-    @patch.object(bilby.gw.detector.Interferometer, "save_data")
+    @mock.patch.object(bilby.gw.detector.Interferometer, "save_data")
     def test_save_data(self, m):
         self.ifo_list.save_data(outdir="test_outdir", label="test_outdir")
         m.assert_called_with(outdir="test_outdir", label="test_outdir")
diff --git a/test/gw/detector/psd_test.py b/test/gw/detector/psd_test.py
index 2d9f9acb6ee4ee62b678def08160f7f7b700a59a..238c3cfa0e464881231b44b40fb16fb22fcab96a 100644
--- a/test/gw/detector/psd_test.py
+++ b/test/gw/detector/psd_test.py
@@ -1,10 +1,9 @@
 import logging
 import os
 import unittest
+from unittest import mock
 
-import mock
 import numpy as np
-from mock import MagicMock
 
 import bilby
 
@@ -199,28 +198,28 @@ class TestPowerSpectralDensityWithFiles(unittest.TestCase):
 
     def test_check_file_psd_file_set_to_asd_file(self):
         logger = logging.getLogger("bilby")
-        m = MagicMock()
+        m = mock.MagicMock()
         logger.warning = m
         _ = bilby.gw.detector.PowerSpectralDensity(psd_file=self.asd_file)
         self.assertEqual(4, m.call_count)
 
     def test_check_file_not_called_psd_file_set_to_psd_file(self):
         logger = logging.getLogger("bilby")
-        m = MagicMock()
+        m = mock.MagicMock()
         logger.warning = m
         _ = bilby.gw.detector.PowerSpectralDensity(psd_file=self.psd_file)
         self.assertEqual(0, m.call_count)
 
     def test_check_file_asd_file_set_to_psd_file(self):
         logger = logging.getLogger("bilby")
-        m = MagicMock()
+        m = mock.MagicMock()
         logger.warning = m
         _ = bilby.gw.detector.PowerSpectralDensity(asd_file=self.psd_file)
         self.assertEqual(4, m.call_count)
 
     def test_check_file_not_called_asd_file_set_to_asd_file(self):
         logger = logging.getLogger("bilby")
-        m = MagicMock()
+        m = mock.MagicMock()
         logger.warning = m
         _ = bilby.gw.detector.PowerSpectralDensity(asd_file=self.asd_file)
         self.assertEqual(0, m.call_count)
diff --git a/test/gw/detector/strain_data_test.py b/test/gw/detector/strain_data_test.py
index 9cba741042a714e9875e2995d55bc628d7b78cfd..0f82a40a26e1d058c0005e7a546360a07cd8c502 100644
--- a/test/gw/detector/strain_data_test.py
+++ b/test/gw/detector/strain_data_test.py
@@ -1,9 +1,8 @@
 import unittest
+from unittest import mock
 
-import mock
 import numpy as np
 import scipy.signal
-from mock import patch
 
 import bilby
 
@@ -198,7 +197,7 @@ class TestInterferometerStrainData(unittest.TestCase):
         self.ifosd._time_domain_strain = expected_strain
         self.assertEqual(expected_strain, self.ifosd.time_domain_strain)
 
-    @patch("bilby.core.utils.infft")
+    @mock.patch("bilby.core.utils.infft")
     def test_time_domain_strain_from_frequency_domain_strain(self, m):
         m.return_value = 5
         self.ifosd.sampling_frequency = 200
@@ -222,7 +221,7 @@ class TestInterferometerStrainData(unittest.TestCase):
             np.array_equal(expected_strain, self.ifosd.frequency_domain_strain)
         )
 
-    @patch("bilby.core.utils.nfft")
+    @mock.patch("bilby.core.utils.nfft")
     def test_frequency_domain_strain_from_frequency_domain_strain(self, m):
         self.ifosd.start_time = 0
         self.ifosd.duration = 4
diff --git a/test/gw/sampler/proposal_test.py b/test/gw/sampler/proposal_test.py
index 282ea61f6cc0c653e523bf242c9b446a8ae53212..3ad800084f7d25dbe0d95b14c8e9c2c850d633b9 100644
--- a/test/gw/sampler/proposal_test.py
+++ b/test/gw/sampler/proposal_test.py
@@ -1,5 +1,5 @@
 import unittest
-import mock
+from unittest import mock
 
 import numpy as np
 
diff --git a/test/gw/waveform_generator_test.py b/test/gw/waveform_generator_test.py
index f11bb04f9b3b27eeee0f2693b14d71369956ebbc..f2564c6d539fcc8d0dd0f100d87ac47f345dd29b 100644
--- a/test/gw/waveform_generator_test.py
+++ b/test/gw/waveform_generator_test.py
@@ -1,8 +1,7 @@
 import unittest
+from unittest import mock
 import bilby
 import numpy as np
-import mock
-from mock import MagicMock
 
 
 def dummy_func_array_return_value(
@@ -259,7 +258,7 @@ class TestFrequencyDomainStrainMethod(unittest.TestCase):
         del self.simulation_parameters
 
     def test_parameter_conversion_is_called(self):
-        self.waveform_generator.parameter_conversion = MagicMock(
+        self.waveform_generator.parameter_conversion = mock.MagicMock(
             side_effect=KeyError("test")
         )
         with self.assertRaises(KeyError):
@@ -328,7 +327,7 @@ class TestFrequencyDomainStrainMethod(unittest.TestCase):
             )
 
     def test_key_popping(self):
-        self.waveform_generator.parameter_conversion = MagicMock(
+        self.waveform_generator.parameter_conversion = mock.MagicMock(
             return_value=(
                 dict(
                     amplitude=1e-21,
@@ -465,7 +464,7 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
         del self.simulation_parameters
 
     def test_parameter_conversion_is_called(self):
-        self.waveform_generator.parameter_conversion = MagicMock(
+        self.waveform_generator.parameter_conversion = mock.MagicMock(
             side_effect=KeyError("test")
         )
         with self.assertRaises(KeyError):
@@ -538,7 +537,7 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
             )
 
     def test_key_popping(self):
-        self.waveform_generator.parameter_conversion = MagicMock(
+        self.waveform_generator.parameter_conversion = mock.MagicMock(
             return_value=(
                 dict(
                     amplitude=1e-2,