diff --git a/Tests/UnitTests/GUI/TestGUI.cpp b/Tests/UnitTests/GUI/TestGUI.cpp
index c8829fc6acd2abf7ec39cc701a33ff52436c9565..f5c39d35e5c86e7dd15d3f27cd10181f74a396af 100644
--- a/Tests/UnitTests/GUI/TestGUI.cpp
+++ b/Tests/UnitTests/GUI/TestGUI.cpp
@@ -29,10 +29,29 @@
 #include "TestIntensityDataItem.h"
 #include "TestProjectUtils.h"
 #include "TestParticleCoreShell.h"
+#include <memory>
 
-inline bool TestResult(QObject *testObject, int argc = 0, char **argv = Q_NULLPTR) {
-	return QTest::qExec(testObject, argc, argv) != 0;
-}
+class GUITestFactory {
+public:
+    using create_t = std::function<QObject*()>;
+
+    template<typename T> void add() {
+        creators.push_back([](){return new T();});
+    }
+
+    int runAll(int argc, char** argv)
+    {
+        int result(0);
+        for(auto f : creators) {
+            std::unique_ptr<QObject> obj(f());
+            result +=  QTest::qExec(obj.get(), argc, argv);
+        }
+        return result;
+    }
+
+private:
+    std::vector<create_t> creators;
+};
 
 int main(int argc, char** argv) {
     QCoreApplication app(argc, argv);
@@ -40,65 +59,36 @@ int main(int argc, char** argv) {
 
     QMetaType::registerComparators<ComboProperty>();
 
-    TestFormFactorItems testFormFactorItems;
-    TestFTDistributionItems testFTDistributionItems;
-    TestParameterizedItem testParameterizedItem;
-    TestParticleItem testParticleItem;
-    TestLayerRoughnessItems testLayerRoughnessItems;
-    TestParaCrystalItems testParaCrystalItems;
-    TestSessionModel testSessionModel;
-    TestGUICoreObjectCorrespondence testGUICoreObjectCorrespondence;
-    TestSessionItem testSessionItem;
-    TestMapperCases testMapperCases;
-    TestMapperForItem testMapperForItem;
-    TestGUIHelpers testGUIHelpers;
-    TestFitParameterModel testFitParameterModel;
-    TestMaterialModel testMaterialModel;
-    TestComboProperty testComboProperty;
-    TestTranslations testTranslations;
-    TestGroupProperty testGroupProperty;
-    TestParticleDistributionItem testParticleDistributionItem;
-    TestParameterTreeUtils testParameterTreeUtils;
-    TestDetectorItems testDetectorItems;
-    TestLinkInstrument testLinkInstrument;
-    TestUpdateTimer testUpdateTimer;
-    TestProjectDocument testProjectDocument;
-    TestSaveService testSaveService;
-    TestOutputDataIOService testIO;
-    TestIntensityDataItem testIntensityData;
-    TestProjectUtils testProjectUtils;
-    TestParticleCoreShell testParticleCoreShell;
-
-    bool status(false);
+    GUITestFactory tests;
 
-    status |= TestResult(&testFormFactorItems, argc, argv);
-    status |= TestResult(&testFTDistributionItems, argc, argv);
-    status |= TestResult(&testParameterizedItem, argc, argv);
-    status |= TestResult(&testParticleItem, argc, argv);
-    status |= TestResult(&testLayerRoughnessItems, argc, argv);
-    status |= TestResult(&testParaCrystalItems, argc, argv);
-    status |= TestResult(&testSessionModel, argc, argv);
-    status |= TestResult(&testGUICoreObjectCorrespondence, argc, argv);
-    status |= TestResult(&testSessionItem);
-    status |= TestResult(&testMapperCases, argc, argv);
-    status |= TestResult(&testSessionModel, argc, argv);
-    status |= TestResult(&testMapperForItem, argc, argv);
-    status |= TestResult(&testGUIHelpers, argc, argv);
-    status |= TestResult(&testFitParameterModel, argc, argv);
-    status |= TestResult(&testMaterialModel, argc, argv);
-    status |= TestResult(&testComboProperty, argc, argv);
-    status |= TestResult(&testTranslations, argc, argv);
-    status |= TestResult(&testGroupProperty, argc, argv);
-    status |= TestResult(&testParticleDistributionItem, argc, argv);
-    status |= TestResult(&testParameterTreeUtils, argc, argv);
-    status |= TestResult(&testDetectorItems, argc, argv);
-    status |= TestResult(&testLinkInstrument, argc, argv);
-    status |= TestResult(&testUpdateTimer, argc, argv);
-    status |= TestResult(&testProjectDocument, argc, argv);
-    status |= TestResult(&testSaveService, argc, argv);
-    status |= TestResult(&testIO, argc, argv);
-    status |= TestResult(&testIntensityData, argc, argv);
-    status |= TestResult(&testProjectUtils, argc, argv);
+    tests.add<TestFormFactorItems>();
+    tests.add<TestFTDistributionItems>();
+    tests.add<TestParameterizedItem>();
+    tests.add<TestParticleItem>();
+    tests.add<TestLayerRoughnessItems>();
+    tests.add<TestParaCrystalItems>();
+    tests.add<TestSessionModel>();
+    tests.add<TestGUICoreObjectCorrespondence>();
+    tests.add<TestSessionItem>();
+    tests.add<TestMapperCases>();
+    tests.add<TestMapperForItem>();
+    tests.add<TestGUIHelpers>();
+    tests.add<TestFitParameterModel>();
+    tests.add<TestMaterialModel>();
+    tests.add<TestComboProperty>();
+    tests.add<TestTranslations>();
+    tests.add<TestGroupProperty>();
+    tests.add<TestParticleDistributionItem>();
+    tests.add<TestParameterTreeUtils>();
+    tests.add<TestDetectorItems>();
+    tests.add<TestLinkInstrument>();
+    tests.add<TestUpdateTimer>();
+    tests.add<TestProjectDocument>();
+    tests.add<TestSaveService>();
+    tests.add<TestOutputDataIOService>();
+    tests.add<TestIntensityDataItem>();
+    tests.add<TestProjectUtils>();
+    tests.add<TestParticleCoreShell>();
 
-    return status;
+    return tests.runAll(argc, argv);
 }