diff --git a/qt/python/CMakeLists.txt b/qt/python/CMakeLists.txt
index b7af7cf5768b58983845f3ae75f4164d6d427bbe..bfb66b509f947a5a94818a8aad0f28836df806cb 100644
--- a/qt/python/CMakeLists.txt
+++ b/qt/python/CMakeLists.txt
@@ -90,6 +90,8 @@ if(ENABLE_WORKBENCH)
     mantidqt/widgets/test/test_fitpropertybrowser.py
     mantidqt/widgets/samplelogs/test/test_samplelogs_model.py
     mantidqt/widgets/samplelogs/test/test_samplelogs_presenter.py
+    mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py
+    mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py
     mantidqt/widgets/observers/test/test_ads_observer.py
     mantidqt/widgets/observers/test/test_observing_presenter.py
     mantidqt/widgets/observers/test/test_observing_view.py
@@ -122,6 +124,7 @@ if(ENABLE_WORKBENCH)
     mantidqt/widgets/instrumentview/test/test_instrumentview_io.py
     mantidqt/widgets/instrumentview/test/test_instrumentview_view.py
     mantidqt/widgets/samplelogs/test/test_samplelogs_view.py
+    mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py
     mantidqt/widgets/test/test_jupyterconsole.py
     mantidqt/widgets/workspacedisplay/matrix/test/test_matrixworkspacedisplay_io.py
     mantidqt/widgets/workspacedisplay/table/test/test_tableworkspacedisplay_io.py
diff --git a/qt/python/mantidqt/widgets/sliceviewer/__init__.py b/qt/python/mantidqt/widgets/sliceviewer/__init__.py
index 57d5ae5a28a63ed0dd44886f201c25df7cac61ca..57b1565b3979c58b8e99c11e430f73f54fc80884 100644
--- a/qt/python/mantidqt/widgets/sliceviewer/__init__.py
+++ b/qt/python/mantidqt/widgets/sliceviewer/__init__.py
@@ -7,3 +7,13 @@
 #  This file is part of the mantid workbench.
 #
 #
+# Can be launch from python by _e.g_
+#
+#
+# from mantidqt.widgets.sliceviewer.presenter import SliceViewer
+# from mantid.simpleapi import LoadMD
+# from qtpy.QtWidgets import QApplication
+# ws = LoadMD('ExternalData/Testing/SystemTests/tests/analysis/reference/ConvertWANDSCDtoQTest_HKL.nxs')
+# app = QApplication([])
+# window = SliceViewer(ws)
+# app.exec_()
diff --git a/qt/python/mantidqt/widgets/sliceviewer/presenter.py b/qt/python/mantidqt/widgets/sliceviewer/presenter.py
index 59b6e81235aad8aef106a445a0df5a2c150c4f68..a95c67bfcac033ed09b42df6d4c931a1a6316ddb 100644
--- a/qt/python/mantidqt/widgets/sliceviewer/presenter.py
+++ b/qt/python/mantidqt/widgets/sliceviewer/presenter.py
@@ -13,10 +13,10 @@ from .view import SliceViewerView
 
 
 class SliceViewer(object):
-    def __init__(self, ws, parent=None):
-        self.model = SliceViewerModel(ws)
-
-        self.view = SliceViewerView(self, self.model.get_dimensions_info(), parent)
+    def __init__(self, ws, parent=None, model=None, view=None):
+        # Create model and view, or accept mocked versions
+        self.model = model if model else SliceViewerModel(ws)
+        self.view = view if view else SliceViewerView(self, self.model.get_dimensions_info(), parent)
 
         self.new_plot()
 
diff --git a/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..23aab1b4c4490ba04b6bb1af4c6598edcb44aeee
--- /dev/null
+++ b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py
@@ -0,0 +1,63 @@
+# Mantid Repository : https://github.com/mantidproject/mantid
+#
+# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
+#     NScD Oak Ridge National Laboratory, European Spallation Source
+#     & Institut Laue - Langevin
+# SPDX - License - Identifier: GPL - 3.0 +
+#  This file is part of the mantid workbench.
+#
+#
+from __future__ import (absolute_import, division, print_function)
+
+from mantid.simpleapi import CreateMDHistoWorkspace
+from mantidqt.widgets.sliceviewer.model import SliceViewerModel
+from numpy.testing import assert_equal
+import numpy as np
+import unittest
+
+
+class SliceViewerModelTest(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(self):
+        self.ws_MD_3D = CreateMDHistoWorkspace(Dimensionality=3,
+                                               Extents='-3,3,-10,10,-1,1',
+                                               SignalInput=range(100),
+                                               ErrorInput=range(100),
+                                               NumberOfBins='5,5,4',
+                                               Names='Dim1,Dim2,Dim3',
+                                               Units='MomentumTransfer,EnergyTransfer,Angstrom',
+                                               OutputWorkspace='ws_MD_2d')
+
+    def test_model_MDH(self):
+
+        model = SliceViewerModel(self.ws_MD_3D)
+
+        self.assertEqual(model.get_ws(), self.ws_MD_3D)
+
+        assert_equal(model.get_data((None, 2, 2)), range(90,95))
+        assert_equal(model.get_data((1, 2, None)), range(18,118,25))
+        assert_equal(model.get_data((None, None, 0)), np.reshape(range(50,75), (5,5)).T)
+
+        dim_info = model.get_dim_info(0)
+        self.assertEqual(dim_info['minimum'], -3)
+        self.assertEqual(dim_info['maximum'], 3)
+        self.assertEqual(dim_info['number_of_bins'], 5)
+        self.assertAlmostEqual(dim_info['width'], 1.2)
+        self.assertEqual(dim_info['name'], 'Dim1')
+        self.assertEqual(dim_info['units'], 'MomentumTransfer')
+
+        dim_infos = model.get_dimensions_info()
+        self.assertEqual(len(dim_infos), 3)
+
+        dim_info = dim_infos[2]
+        self.assertEqual(dim_info['minimum'], -1)
+        self.assertEqual(dim_info['maximum'], 1)
+        self.assertEqual(dim_info['number_of_bins'], 4)
+        self.assertAlmostEqual(dim_info['width'], 0.5)
+        self.assertEqual(dim_info['name'], 'Dim3')
+        self.assertEqual(dim_info['units'], 'Angstrom')
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py
new file mode 100644
index 0000000000000000000000000000000000000000..4755bf3fc3053045b0e8ff03ea05673c31dd2bca
--- /dev/null
+++ b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py
@@ -0,0 +1,58 @@
+# Mantid Repository : https://github.com/mantidproject/mantid
+#
+# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
+#     NScD Oak Ridge National Laboratory, European Spallation Source
+#     & Institut Laue - Langevin
+# SPDX - License - Identifier: GPL - 3.0 +
+#  This file is part of the mantid workbench.
+#
+#
+from __future__ import (absolute_import, division, print_function)
+
+import matplotlib
+matplotlib.use('Agg') # noqa: E402
+import unittest
+
+from mantid.py3compat import mock
+from mantidqt.widgets.sliceviewer.model import SliceViewerModel
+from mantidqt.widgets.sliceviewer.presenter import SliceViewer
+from mantidqt.widgets.sliceviewer.view import SliceViewerView
+
+
+class SliceViewerTest(unittest.TestCase):
+
+    def setUp(self):
+        self.view = mock.Mock(spec=SliceViewerView)
+        self.view.dimensions = mock.Mock()
+
+        self.model = mock.Mock(spec=SliceViewerModel)
+
+    def test_sliceviewer(self):
+
+        presenter = SliceViewer(None, model=self.model, view=self.view)
+
+        # setup calls
+        self.assertEqual(self.model.get_dimensions_info.call_count, 0)
+        self.assertEqual(self.model.get_ws.call_count, 1)
+        self.assertEqual(self.view.dimensions.get_slicepoint.call_count, 1)
+        self.assertEqual(self.view.plot.call_count, 1)
+
+        # new_plot
+        self.model.reset_mock()
+        self.view.reset_mock()
+        presenter.new_plot()
+        self.assertEqual(self.model.get_ws.call_count, 1)
+        self.assertEqual(self.view.dimensions.get_slicepoint.call_count, 1)
+        self.assertEqual(self.view.plot.call_count, 1)
+
+        # update_plot_data
+        self.model.reset_mock()
+        self.view.reset_mock()
+        presenter.update_plot_data()
+        self.assertEqual(self.model.get_data.call_count, 1)
+        self.assertEqual(self.view.dimensions.get_slicepoint.call_count, 1)
+        self.assertEqual(self.view.update_plot_data.call_count, 1)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py
new file mode 100644
index 0000000000000000000000000000000000000000..3bcc48a31719c1ea1e8838be416b5ea01bf3adb6
--- /dev/null
+++ b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py
@@ -0,0 +1,34 @@
+# Mantid Repository : https://github.com/mantidproject/mantid
+#
+# Copyright © 2019 ISIS Rutherford Appleton Laboratory UKRI,
+#     NScD Oak Ridge National Laboratory, European Spallation Source
+#     & Institut Laue - Langevin
+# SPDX - License - Identifier: GPL - 3.0 +
+#  This file is part of the mantid workbench.
+from qtpy.QtWidgets import QApplication
+
+import matplotlib as mpl
+mpl.use('Agg')  # noqa
+from mantid.simpleapi import CreateMDHistoWorkspace
+from mantidqt.utils.qt.testing import GuiTest
+from mantidqt.utils.qt.testing.qt_widget_finder import QtWidgetFinder
+from mantidqt.widgets.sliceviewer.presenter import SliceViewer
+
+
+class SliceViewerViewTest(GuiTest, QtWidgetFinder):
+    def test_deleted_on_close(self):
+        ws = CreateMDHistoWorkspace(Dimensionality=3,
+                                    Extents='-3,3,-10,10,-1,1',
+                                    SignalInput=range(100),
+                                    ErrorInput=range(100),
+                                    NumberOfBins='5,5,4',
+                                    Names='Dim1,Dim2,Dim3',
+                                    Units='MomentumTransfer,EnergyTransfer,Angstrom',
+                                    OutputWorkspace='ws_MD_2d')
+        pres = SliceViewer(ws)
+        self.assert_widget_created()
+        pres.view.close()
+
+        QApplication.processEvents()
+
+        self.assert_no_toplevel_widgets()