diff --git a/test/likelihood_tests.py b/test/likelihood_tests.py
index a3d6da004a6b6690332c957acee07256c6b3d67b..5688327100da4fe171e9920d537dcacbb332a725 100644
--- a/test/likelihood_tests.py
+++ b/test/likelihood_tests.py
@@ -99,6 +99,7 @@ class TestAnalytical1DLikelihood(unittest.TestCase):
     def test_set_func(self):
         def new_func(x):
             return x
+
         with self.assertRaises(AttributeError):
             # noinspection PyPropertyAccess
             self.analytical_1d_likelihood.func = new_func
@@ -443,5 +444,81 @@ class TestExponentialLikelihood(unittest.TestCase):
             self.assertEqual(-3, exponential_likelihood.log_likelihood())
 
 
+class TestJointLikelihood(unittest.TestCase):
+
+    def setUp(self):
+        self.x = np.array([1, 2, 3])
+        self.y = np.array([1, 2, 3])
+        self.first_likelihood = tupak.core.likelihood.GaussianLikelihood(
+            x=self.x,
+            y=self.y,
+            func=lambda x, param1, param2: (param1 + param2) * x,
+            sigma=1)
+        self.second_likelihood = tupak.core.likelihood.PoissonLikelihood(
+            x=self.x,
+            y=self.y,
+            func=lambda x, param2, param3: (param2 + param3) * x)
+        self.third_likelihood = tupak.core.likelihood.ExponentialLikelihood(
+            x=self.x,
+            y=self.y,
+            func=lambda x, param4, param5: (param4 + param5) * x
+        )
+        self.joint_likelihood = tupak.core.likelihood.JointLikelihood(self.first_likelihood,
+                                                                      self.second_likelihood,
+                                                                      self.third_likelihood)
+
+        self.first_likelihood.parameters['param1'] = 1
+        self.first_likelihood.parameters['param2'] = 2
+        self.second_likelihood.parameters['param2'] = 2
+        self.second_likelihood.parameters['param3'] = 3
+        self.third_likelihood.parameters['param4'] = 4
+        self.third_likelihood.parameters['param5'] = 5
+
+        self.joint_likelihood.parameters['param1'] = 1
+        self.joint_likelihood.parameters['param2'] = 2
+        self.joint_likelihood.parameters['param3'] = 3
+        self.joint_likelihood.parameters['param4'] = 4
+        self.joint_likelihood.parameters['param5'] = 5
+
+    def tearDown(self):
+        del self.x
+        del self.y
+        del self.first_likelihood
+        del self.second_likelihood
+        del self.third_likelihood
+        del self.joint_likelihood
+
+    def test_parameters_consistent_from_init(self):
+        expected = dict(param1=1, param2=2, param3=3, param4=4, param5=5, )
+        self.assertDictEqual(expected, self.joint_likelihood.parameters)
+
+    def test_log_likelihood_correctly_sums(self):
+        expected = self.first_likelihood.log_likelihood() + \
+            self.second_likelihood.log_likelihood() + \
+            self.third_likelihood.log_likelihood()
+        self.assertEqual(expected, self.joint_likelihood.log_likelihood())
+
+    def test_log_likelihood_checks_parameter_updates(self):
+        self.first_likelihood.parameters['param2'] = 7
+        self.second_likelihood.parameters['param2'] = 7
+        self.joint_likelihood.parameters['param2'] = 7
+        expected = self.first_likelihood.log_likelihood() + \
+            self.second_likelihood.log_likelihood() + \
+            self.third_likelihood.log_likelihood()
+        self.assertEqual(expected, self.joint_likelihood.log_likelihood())
+
+    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.joint_likelihood = tupak.core.likelihood.JointLikelihood(self.first_likelihood,
+                                                                      self.second_likelihood,
+                                                                      self.third_likelihood)
+        expected = self.first_likelihood.noise_log_likelihood() + \
+            self.second_likelihood.noise_log_likelihood() + \
+            self.third_likelihood.noise_log_likelihood()
+        self.assertEqual(expected, self.joint_likelihood.noise_log_likelihood())
+
+
 if __name__ == '__main__':
     unittest.main()