diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h
index b9c81fe21ee7e27acf55d429b74743d6b6f46b0e..c5bb0d4bf6e54d5a27085fb2d4e7b324815a5af1 100644
--- a/src/plugins/cppeditor/cppeditorplugin.h
+++ b/src/plugins/cppeditor/cppeditorplugin.h
@@ -202,17 +202,9 @@ private slots:
     void test_quickfix_ExtractLiteralAsParameter_freeFunction_separateFiles();
     void test_quickfix_ExtractLiteralAsParameter_memberFunction_separateFiles();
 
-    void test_quickfix_InsertVirtualMethods_onlyDecl();
-    void test_quickfix_InsertVirtualMethods_onlyDeclWithoutVirtual();
-    void test_quickfix_InsertVirtualMethods_Access();
-    void test_quickfix_InsertVirtualMethods_Superclass();
-    void test_quickfix_InsertVirtualMethods_SuperclassOverride();
-    void test_quickfix_InsertVirtualMethods_PureVirtualOnlyDecl();
-    void test_quickfix_InsertVirtualMethods_PureVirtualInside();
-    void test_quickfix_InsertVirtualMethods_inside();
-    void test_quickfix_InsertVirtualMethods_outside();
+    void test_quickfix_InsertVirtualMethods_data();
+    void test_quickfix_InsertVirtualMethods();
     void test_quickfix_InsertVirtualMethods_implementationFile();
-    void test_quickfix_InsertVirtualMethods_notrigger_allImplemented();
     void test_quickfix_InsertVirtualMethods_BaseClassInNamespace();
 
     void test_functionhelper_virtualFunctions();
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp
index e70e56d778aed2f8dee88678752d4b8984ca9e1d..16e22817a557783e211f79cf558c224db46249d2 100644
--- a/src/plugins/cppeditor/cppquickfix_test.cpp
+++ b/src/plugins/cppeditor/cppquickfix_test.cpp
@@ -3664,17 +3664,25 @@ void CppEditorPlugin::test_quickfix_ExtractLiteralAsParameter_memberFunction_sep
     data.run(&factory);
 }
 
-/// Check: Insert only declarations
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_onlyDecl()
+Q_DECLARE_METATYPE(InsertVirtualMethodsDialog::ImplementationMode)
+
+void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
 {
-    const QByteArray original =
+    QTest::addColumn<InsertVirtualMethodsDialog::ImplementationMode>("implementationMode");
+    QTest::addColumn<bool>("insertVirtualKeyword");
+    QTest::addColumn<QByteArray>("original");
+    QTest::addColumn<QByteArray>("expected");
+
+    // Check: Insert only declarations
+    QTest::newRow("onlyDecl")
+        << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
         "};\n\n"
         "class Derived : public Bas@eA {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
@@ -3684,25 +3692,19 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_onlyDecl()
         "    // BaseA interface\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOnlyDeclarations, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Insert only declarations vithout virtual keyword
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_onlyDeclWithoutVirtual()
-{
-    const QByteArray original =
+    // Check: Insert only declarations vithout virtual keyword
+    QTest::newRow("onlyDeclWithoutVirtual")
+        << InsertVirtualMethodsDialog::ModeOnlyDeclarations << false << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
         "};\n\n"
         "class Derived : public Bas@eA {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
@@ -3712,18 +3714,12 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_onlyDeclWithoutVirtual(
         "    // BaseA interface\n"
         "public:\n"
         "    int virtualFuncA();\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOnlyDeclarations, false));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Are access specifiers considered
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_Access()
-{
-    const QByteArray original =
+    // Check: Are access specifiers considered
+    QTest::newRow("Access")
+        << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int a();\n"
@@ -3741,8 +3737,8 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_Access()
         "    virtual int g();\n"
         "};\n\n"
         "class Der@ived : public BaseA {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int a();\n"
@@ -3776,18 +3772,12 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_Access()
         "    virtual int f();\n\n"
         "signals:\n"
         "    virtual int g();\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOnlyDeclarations, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Is a base class of a base class considered.
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_Superclass()
-{
-    const QByteArray original =
+    // Check: Is a base class of a base class considered.
+    QTest::newRow("Superclass")
+        << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int a();\n"
@@ -3797,8 +3787,8 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_Superclass()
         "    virtual int b();\n"
         "};\n\n"
         "class Der@ived : public BaseB {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int a();\n"
@@ -3816,18 +3806,12 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_Superclass()
         "    // BaseA interface\n"
         "public:\n"
         "    virtual int a();\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOnlyDeclarations, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Do not insert reimplemented functions twice.
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_SuperclassOverride()
-{
-    const QByteArray original =
+    // Check: Do not insert reimplemented functions twice.
+    QTest::newRow("SuperclassOverride")
+        << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int a();\n"
@@ -3837,8 +3821,8 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_SuperclassOverride()
         "    virtual int a();\n"
         "};\n\n"
         "class Der@ived : public BaseB {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int a();\n"
@@ -3852,25 +3836,19 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_SuperclassOverride()
         "    // BaseA interface\n"
         "public:\n"
         "    virtual int a();\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOnlyDeclarations, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Insert only declarations for pure virtual function
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_PureVirtualOnlyDecl()
-{
-    const QByteArray original =
+    // Check: Insert only declarations for pure virtual function
+    QTest::newRow("PureVirtualOnlyDecl")
+        << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA() = 0;\n"
         "};\n\n"
         "class Derived : public Bas@eA {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA() = 0;\n"
@@ -3880,25 +3858,19 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_PureVirtualOnlyDecl()
         "    // BaseA interface\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOnlyDeclarations, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Insert pure virtual functions inside class
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_PureVirtualInside()
-{
-    const QByteArray original =
+    // Check: Insert pure virtual functions inside class
+    QTest::newRow("PureVirtualInside")
+        << InsertVirtualMethodsDialog::ModeInsideClass << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA() = 0;\n"
         "};\n\n"
         "class Derived : public Bas@eA {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA() = 0;\n"
@@ -3910,25 +3882,19 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_PureVirtualInside()
         "    virtual int virtualFuncA()\n"
         "    {\n"
         "    }\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeInsideClass, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Insert inside class
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_inside()
-{
-    const QByteArray original =
+    // Check: Insert inside class
+    QTest::newRow("inside")
+        << InsertVirtualMethodsDialog::ModeInsideClass << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
         "};\n\n"
         "class Derived : public Bas@eA {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
@@ -3940,25 +3906,19 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_inside()
         "    virtual int virtualFuncA()\n"
         "    {\n"
         "    }\n"
-        "};\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeInsideClass, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "};\n"
+    );
 
-/// Check: Insert outside class
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_outside()
-{
-    const QByteArray original =
+    // Check: Insert outside class
+    QTest::newRow("outside")
+        << InsertVirtualMethodsDialog::ModeOutsideClass << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
         "};\n\n"
         "class Derived : public Bas@eA {\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
@@ -3971,18 +3931,12 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_outside()
         "};\n\n"
         "int Derived::virtualFuncA()\n"
         "{\n"
-        "}\n";
-
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOutsideClass, true));
-    TestCase data(original, expected);
-    data.run(&factory);
-}
+        "}\n"
+    );
 
-/// Check: No trigger: all implemented
-void CppEditorPlugin::test_quickfix_InsertVirtualMethods_notrigger_allImplemented()
-{
-    const QByteArray original =
+    // Check: No trigger: all implemented
+    QTest::newRow("notrigger_allImplemented")
+        << InsertVirtualMethodsDialog::ModeOutsideClass << true << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
@@ -3990,8 +3944,8 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_notrigger_allImplemente
         "class Derived : public Bas@eA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
-        "};";
-    const QByteArray expected =
+        "};"
+        ) << _(
         "class BaseA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
@@ -3999,10 +3953,19 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_notrigger_allImplemente
         "class Derived : public Bas@eA {\n"
         "public:\n"
         "    virtual int virtualFuncA();\n"
-        "};\n";
+        "};\n"
+    );
+}
 
-    InsertVirtualMethods factory(new InsertVirtualMethodsDialogTest(
-                                     InsertVirtualMethodsDialog::ModeOutsideClass, true));
+void CppEditorPlugin::test_quickfix_InsertVirtualMethods()
+{
+    QFETCH(InsertVirtualMethodsDialog::ImplementationMode, implementationMode);
+    QFETCH(bool, insertVirtualKeyword);
+    QFETCH(QByteArray, original);
+    QFETCH(QByteArray, expected);
+
+    InsertVirtualMethods factory(
+                new InsertVirtualMethodsDialogTest(implementationMode, insertVirtualKeyword));
     TestCase data(original, expected);
     data.run(&factory);
 }