Don't inherit ANGLETest SetUp and TearDown.

Instead of inheriting from testing::Test's SetUp and TearDown we add
new methods 'testSetUp' and 'testTearDown'. This helps prevent a common
error of forgetting to call the base class method.

Also add a check in the ANGLETest destructor that SetUp and TearDown
have been called.

Bug: angleproject:3393
Change-Id: Iab211305cc06ffea9ca649e864ddc9b180f2cba0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1593960
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/tests/egl_tests/EGLBlobCacheTest.cpp b/src/tests/egl_tests/EGLBlobCacheTest.cpp
index d01b6b7..90912e1 100644
--- a/src/tests/egl_tests/EGLBlobCacheTest.cpp
+++ b/src/tests/egl_tests/EGLBlobCacheTest.cpp
@@ -84,10 +84,8 @@
         forceNewDisplay();
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         EGLDisplay display = getEGLWindow()->getDisplay();
         mHasBlobCache      = IsEGLDisplayExtensionEnabled(display, kEGLExtName);
     }
diff --git a/src/tests/egl_tests/EGLContextCompatibilityTest.cpp b/src/tests/egl_tests/EGLContextCompatibilityTest.cpp
index 02c19c9..84a24d0 100644
--- a/src/tests/egl_tests/EGLContextCompatibilityTest.cpp
+++ b/src/tests/egl_tests/EGLContextCompatibilityTest.cpp
@@ -35,10 +35,8 @@
   public:
     EGLContextCompatibilityTest() : mDisplay(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         ASSERT_TRUE(eglGetPlatformDisplayEXT != nullptr);
 
         EGLint dispattrs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(), EGL_NONE};
@@ -59,12 +57,10 @@
         ASSERT_TRUE(nConfigs == nReturnedConfigs);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
         eglTerminate(mDisplay);
-
-        ANGLETest::TearDown();
     }
 
   protected:
diff --git a/src/tests/egl_tests/EGLContextSharingTest.cpp b/src/tests/egl_tests/EGLContextSharingTest.cpp
index 916d9d9..2645783 100644
--- a/src/tests/egl_tests/EGLContextSharingTest.cpp
+++ b/src/tests/egl_tests/EGLContextSharingTest.cpp
@@ -33,7 +33,7 @@
   public:
     EGLContextSharingTest() : mContexts{EGL_NO_CONTEXT, EGL_NO_CONTEXT}, mTexture(0) {}
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTexture);
 
@@ -49,8 +49,6 @@
 
         // Set default test state to not give an error on shutdown.
         getEGLWindow()->makeCurrent();
-
-        ANGLETest::TearDown();
     }
 
     EGLContext mContexts[2];
diff --git a/src/tests/egl_tests/EGLDebugTest.cpp b/src/tests/egl_tests/EGLDebugTest.cpp
index 5efdbca..9a41385 100644
--- a/src/tests/egl_tests/EGLDebugTest.cpp
+++ b/src/tests/egl_tests/EGLDebugTest.cpp
@@ -17,11 +17,7 @@
 class EGLDebugTest : public ANGLETest
 {
   protected:
-    void TearDown() override
-    {
-        eglDebugMessageControlKHR(nullptr, nullptr);
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { eglDebugMessageControlKHR(nullptr, nullptr); }
 
     bool hasExtension() const { return IsEGLClientExtensionEnabled("EGL_KHR_debug"); }
 
diff --git a/src/tests/egl_tests/EGLDeviceTest.cpp b/src/tests/egl_tests/EGLDeviceTest.cpp
index 4d9d47b..fed5f2a 100644
--- a/src/tests/egl_tests/EGLDeviceTest.cpp
+++ b/src/tests/egl_tests/EGLDeviceTest.cpp
@@ -38,10 +38,8 @@
           mConfig(0)
     {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         ASSERT_TRUE(isD3D11Renderer());
 
         mD3D11Module = LoadLibrary(TEXT("d3d11.dll"));
@@ -70,7 +68,7 @@
         }
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         SafeRelease(mDevice);
         SafeRelease(mDeviceContext);
@@ -94,8 +92,6 @@
             eglTerminate(mDisplay);
             mDisplay = EGL_NO_DISPLAY;
         }
-
-        ANGLETest::TearDown();
     }
 
     void CreateD3D11Device()
@@ -261,7 +257,7 @@
 
     // Note that we must call TearDown() before we release the EGL device, since the display
     // depends on the device
-    TearDown();
+    testTearDown();
 
     eglReleaseDeviceANGLE(eglDevice);
 }
@@ -323,7 +319,7 @@
 
     // Note that we must call TearDown() before we release the EGL device, since the display
     // depends on the device
-    TearDown();
+    testTearDown();
 
     eglReleaseDeviceANGLE(eglDevice);
 }
@@ -408,10 +404,8 @@
   protected:
     EGLDeviceQueryTest() {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         const char *extensionString =
             static_cast<const char *>(eglQueryString(getEGLWindow()->getDisplay(), EGL_EXTENSIONS));
 
diff --git a/src/tests/egl_tests/EGLDirectCompositionTest.cpp b/src/tests/egl_tests/EGLDirectCompositionTest.cpp
index d9a427c..a216a65 100644
--- a/src/tests/egl_tests/EGLDirectCompositionTest.cpp
+++ b/src/tests/egl_tests/EGLDirectCompositionTest.cpp
@@ -39,7 +39,7 @@
   protected:
     EGLDirectCompositionTest() : mOSWindow(nullptr) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
         if (!mRoHelper.SupportedWindowsRelease())
         {
@@ -192,7 +192,7 @@
         ASSERT_TRUE(eglMakeCurrent(mEglDisplay, surface, surface, mEglContext) != EGL_FALSE);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (!mRoHelper.SupportedWindowsRelease())
         {
@@ -290,4 +290,4 @@
     ASSERT_EGL_TRUE(eglDestroyContext(mEglDisplay, mEglContext));
 }
 
-ANGLE_INSTANTIATE_TEST(EGLDirectCompositionTest, ES2_D3D11());
+ANGLE_INSTANTIATE_TEST(EGLDirectCompositionTest, WithNoFixture(ES2_D3D11()));
diff --git a/src/tests/egl_tests/EGLIOSurfaceClientBufferTest.cpp b/src/tests/egl_tests/EGLIOSurfaceClientBufferTest.cpp
index 150d5f1..7238aed 100644
--- a/src/tests/egl_tests/EGLIOSurfaceClientBufferTest.cpp
+++ b/src/tests/egl_tests/EGLIOSurfaceClientBufferTest.cpp
@@ -95,16 +95,12 @@
   protected:
     IOSurfaceClientBufferTest() : mConfig(0), mDisplay(nullptr) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mConfig  = getEGLWindow()->getConfig();
         mDisplay = getEGLWindow()->getDisplay();
     }
 
-    void TearDown() override { ANGLETest::TearDown(); }
-
     void createIOSurfacePbuffer(const ScopedIOSurfaceRef &ioSurface,
                                 EGLint width,
                                 EGLint height,
diff --git a/src/tests/egl_tests/EGLPresentPathD3D11Test.cpp b/src/tests/egl_tests/EGLPresentPathD3D11Test.cpp
index 50161c8..e65ed8f 100644
--- a/src/tests/egl_tests/EGLPresentPathD3D11Test.cpp
+++ b/src/tests/egl_tests/EGLPresentPathD3D11Test.cpp
@@ -27,10 +27,8 @@
           mWindowWidth(0)
     {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mOSWindow    = OSWindow::New();
         mWindowWidth = 64;
         mOSWindow->initialize("EGLPresentPathD3D11", mWindowWidth, mWindowWidth);
@@ -144,7 +142,7 @@
 
     void makeCurrent() { ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, mSurface, mSurface, mContext)); }
 
-    void TearDown() override
+    void testTearDown() override
     {
         SafeRelease(mOffscreenSurfaceD3D11Texture);
 
@@ -170,8 +168,6 @@
 
         mOSWindow->destroy();
         OSWindow::Delete(&mOSWindow);
-
-        ANGLETest::TearDown();
     }
 
     void drawQuadUsingGL()
diff --git a/src/tests/egl_tests/EGLProgramCacheControlTest.cpp b/src/tests/egl_tests/EGLProgramCacheControlTest.cpp
index 8d8f4ac..281df31 100644
--- a/src/tests/egl_tests/EGLProgramCacheControlTest.cpp
+++ b/src/tests/egl_tests/EGLProgramCacheControlTest.cpp
@@ -36,14 +36,12 @@
         // Test flakiness was noticed when reusing displays.
         forceNewDisplay();
         setDeferContextInit(true);
+        setContextProgramCacheEnabled(true);
+        gDefaultPlatformMethods.cacheProgram = TestCacheProgram;
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        setContextProgramCacheEnabled(true, &TestCacheProgram);
-
-        ANGLETest::SetUp();
-
         if (extensionAvailable())
         {
             EGLDisplay display = getEGLWindow()->getDisplay();
@@ -54,11 +52,7 @@
         ASSERT_TRUE(getEGLWindow()->initializeContext());
     }
 
-    void TearDown() override
-    {
-        setContextProgramCacheEnabled(false, angle::DefaultCacheProgram);
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { gDefaultPlatformMethods.cacheProgram = DefaultCacheProgram; }
 
     bool extensionAvailable()
     {
@@ -221,8 +215,7 @@
     EXPECT_EQ(mCachedBinary, binaryBuffer);
 
     // Restart EGL and GL.
-    TearDown();
-    SetUp();
+    recreateTestFixture();
 
     // Warm up the cache.
     EGLint newCacheSize = eglProgramCacheGetAttribANGLE(display, EGL_PROGRAM_CACHE_SIZE_ANGLE);
diff --git a/src/tests/egl_tests/EGLQueryContextTest.cpp b/src/tests/egl_tests/EGLQueryContextTest.cpp
index 5ca7001..5dcb37a 100644
--- a/src/tests/egl_tests/EGLQueryContextTest.cpp
+++ b/src/tests/egl_tests/EGLQueryContextTest.cpp
@@ -13,10 +13,8 @@
 class EGLQueryContextTest : public ANGLETest
 {
   public:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         int clientVersion = GetParam().majorVersion;
 
         EGLint dispattrs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(), EGL_NONE};
@@ -49,7 +47,7 @@
         EXPECT_TRUE(mSurface != EGL_NO_SURFACE);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mDisplay != EGL_NO_DISPLAY)
         {
@@ -59,8 +57,6 @@
             eglTerminate(mDisplay);
         }
         ASSERT_EGL_SUCCESS() << "Error during test TearDown";
-
-        ANGLETest::TearDown();
     }
 
     EGLDisplay mDisplay;
@@ -122,7 +118,7 @@
 TEST_P(EGLQueryContextTest, NotInitialized)
 {
     EGLint val;
-    TearDown();
+    testTearDown();
     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_TYPE, &val) == EGL_FALSE);
     EXPECT_TRUE(eglGetError() == EGL_NOT_INITIALIZED);
 
diff --git a/src/tests/egl_tests/EGLRobustnessTest.cpp b/src/tests/egl_tests/EGLRobustnessTest.cpp
index 2036e53..bf65d53 100644
--- a/src/tests/egl_tests/EGLRobustnessTest.cpp
+++ b/src/tests/egl_tests/EGLRobustnessTest.cpp
@@ -19,10 +19,8 @@
 class EGLRobustnessTest : public ANGLETest
 {
   public:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mOSWindow = OSWindow::New();
         mOSWindow->initialize("EGLRobustnessTest", 500, 500);
         mOSWindow->setVisible(true);
@@ -74,7 +72,7 @@
         mInitialized = true;
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         eglDestroySurface(mDisplay, mWindow);
         eglDestroyContext(mDisplay, mContext);
@@ -83,8 +81,6 @@
         EXPECT_EGL_SUCCESS();
 
         OSWindow::Delete(&mOSWindow);
-
-        ANGLETest::TearDown();
     }
 
     void createContext(EGLint resetStrategy)
@@ -205,8 +201,7 @@
     forceContextReset();
     ASSERT_TRUE(glGetGraphicsResetStatusEXT() != GL_NO_ERROR);
 
-    TearDown();
-    SetUp();
+    recreateTestFixture();
     ASSERT_TRUE(glGetGraphicsResetStatusEXT() == GL_NO_ERROR);
 }
 
diff --git a/src/tests/egl_tests/EGLStreamTest.cpp b/src/tests/egl_tests/EGLStreamTest.cpp
index ce99ee2..66021a8 100644
--- a/src/tests/egl_tests/EGLStreamTest.cpp
+++ b/src/tests/egl_tests/EGLStreamTest.cpp
@@ -371,10 +371,8 @@
 class D3D11TextureStreamSamplingTest : public ANGLETest
 {
   protected:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         EGLWindow *window = getEGLWindow();
         mDisplay          = window->getDisplay();
         if (!IsEGLDisplayExtensionEnabled(mDisplay, "EGL_ANGLE_stream_producer_d3d_texture"))
@@ -410,7 +408,7 @@
         eglQueryDeviceAttribEXT(eglDevice, EGL_D3D11_DEVICE_ANGLE, (EGLAttrib *)&mD3D);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         EGLBoolean result = eglDestroyStreamKHR(mDisplay, mStream);
         ASSERT_EGL_TRUE(result);
@@ -418,8 +416,6 @@
 
         glDeleteRenderbuffers(1, &mRB);
         glDeleteFramebuffers(1, &mFB);
-
-        ANGLETest::TearDown();
     }
 
     EGLDisplay mDisplay  = 0;
diff --git a/src/tests/egl_tests/EGLSurfaceTest.cpp b/src/tests/egl_tests/EGLSurfaceTest.cpp
index 6dc7146..843be11 100644
--- a/src/tests/egl_tests/EGLSurfaceTest.cpp
+++ b/src/tests/egl_tests/EGLSurfaceTest.cpp
@@ -42,16 +42,14 @@
           mOSWindow(nullptr)
     {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mOSWindow = OSWindow::New();
         mOSWindow->initialize("EGLSurfaceTest", 64, 64);
     }
 
     // Release any resources created in the test body
-    void TearDown() override
+    void testTearDown() override
     {
         if (mDisplay != EGL_NO_DISPLAY)
         {
@@ -89,8 +87,6 @@
         OSWindow::Delete(&mOSWindow);
 
         ASSERT_TRUE(mWindowSurface == EGL_NO_SURFACE && mContext == EGL_NO_CONTEXT);
-
-        ANGLETest::TearDown();
     }
 
     void initializeDisplay()
diff --git a/src/tests/egl_tests/EGLSurfacelessContextTest.cpp b/src/tests/egl_tests/EGLSurfacelessContextTest.cpp
index 527f719..08b7a32 100644
--- a/src/tests/egl_tests/EGLSurfacelessContextTest.cpp
+++ b/src/tests/egl_tests/EGLSurfacelessContextTest.cpp
@@ -23,10 +23,8 @@
   public:
     EGLSurfacelessContextTest() : mDisplay(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         EGLint dispattrs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(), EGL_NONE};
         mDisplay           = eglGetPlatformDisplayEXT(
             EGL_PLATFORM_ANGLE_ANGLE, reinterpret_cast<void *>(EGL_DEFAULT_DISPLAY), dispattrs);
@@ -56,7 +54,7 @@
         ASSERT_NE(nullptr, mConfig);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
 
@@ -71,8 +69,6 @@
         }
 
         eglTerminate(mDisplay);
-
-        ANGLETest::TearDown();
     }
 
   protected:
diff --git a/src/tests/egl_tests/EGLX11VisualTest.cpp b/src/tests/egl_tests/EGLX11VisualTest.cpp
index 4ffae47..5126974 100644
--- a/src/tests/egl_tests/EGLX11VisualTest.cpp
+++ b/src/tests/egl_tests/EGLX11VisualTest.cpp
@@ -27,11 +27,7 @@
 class EGLX11VisualHintTest : public ANGLETest
 {
   public:
-    void SetUp() override
-    {
-        ANGLETest::SetUp();
-        mDisplay = XOpenDisplay(nullptr);
-    }
+    void testSetUp() override { mDisplay = XOpenDisplay(nullptr); }
 
     std::vector<EGLint> getDisplayAttributes(int visualId) const
     {
diff --git a/src/tests/gl_tests/AttributeLayoutTest.cpp b/src/tests/gl_tests/AttributeLayoutTest.cpp
index 66b705d..858697f 100644
--- a/src/tests/gl_tests/AttributeLayoutTest.cpp
+++ b/src/tests/gl_tests/AttributeLayoutTest.cpp
@@ -242,10 +242,8 @@
 
     void GetTestCases(void);
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glClearColor(.2f, .2f, .2f, .0f);
         glClear(GL_COLOR_BUFFER_BIT);
 
@@ -277,12 +275,11 @@
         GetTestCases();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         mTestCases.clear();
         glDeleteProgram(mProgram);
         glDeleteBuffers(1, &mIndexBuffer);
-        ANGLETest::TearDown();
     }
 
     virtual bool Skip(const TestCase &) { return false; }
diff --git a/src/tests/gl_tests/BPTCCompressedTextureTest.cpp b/src/tests/gl_tests/BPTCCompressedTextureTest.cpp
index eb433f4..9d71e5a 100644
--- a/src/tests/gl_tests/BPTCCompressedTextureTest.cpp
+++ b/src/tests/gl_tests/BPTCCompressedTextureTest.cpp
@@ -36,10 +36,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -71,12 +69,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mTextureProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mTextureProgram); }
 
     void setupTextureParameters(GLuint texture)
     {
diff --git a/src/tests/gl_tests/BindUniformLocationTest.cpp b/src/tests/gl_tests/BindUniformLocationTest.cpp
index f5baafb..3fb0537 100644
--- a/src/tests/gl_tests/BindUniformLocationTest.cpp
+++ b/src/tests/gl_tests/BindUniformLocationTest.cpp
@@ -29,13 +29,12 @@
         setConfigAlphaBits(8);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram != 0)
         {
             glDeleteProgram(mProgram);
         }
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram = 0;
diff --git a/src/tests/gl_tests/BlendFuncExtendedTest.cpp b/src/tests/gl_tests/BlendFuncExtendedTest.cpp
index 49d434c..a30a082 100644
--- a/src/tests/gl_tests/BlendFuncExtendedTest.cpp
+++ b/src/tests/gl_tests/BlendFuncExtendedTest.cpp
@@ -103,10 +103,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenBuffers(1, &mVBO);
         glBindBuffer(GL_ARRAY_BUFFER, mVBO);
 
@@ -118,7 +116,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mVBO);
         if (mProgram)
@@ -127,8 +125,6 @@
         }
 
         ASSERT_GL_NO_ERROR();
-
-        ANGLETest::TearDown();
     }
 
     void makeProgram(const char *vertSource, const char *fragSource)
@@ -211,9 +207,9 @@
   protected:
     EXTBlendFuncExtendedDrawTestES3() : EXTBlendFuncExtendedDrawTest(), mIsES31OrNewer(false) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        EXTBlendFuncExtendedDrawTest::SetUp();
+        EXTBlendFuncExtendedDrawTest::testSetUp();
         if (getClientMajorVersion() > 3 || getClientMinorVersion() >= 1)
         {
             mIsES31OrNewer = true;
diff --git a/src/tests/gl_tests/BlendMinMaxTest.cpp b/src/tests/gl_tests/BlendMinMaxTest.cpp
index 97aaf59..a2f01bc 100644
--- a/src/tests/gl_tests/BlendMinMaxTest.cpp
+++ b/src/tests/gl_tests/BlendMinMaxTest.cpp
@@ -110,10 +110,8 @@
         }
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
         if (mProgram == 0)
         {
@@ -149,13 +147,11 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    virtual void TearDown()
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteFramebuffers(1, &mFramebuffer);
         glDeleteRenderbuffers(1, &mColorRenderbuffer);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
diff --git a/src/tests/gl_tests/BlitFramebufferANGLETest.cpp b/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
index bca40ea..9fbaf2a 100644
--- a/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
+++ b/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
@@ -61,10 +61,8 @@
         mBGRAMultisampledFBO          = 0;
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mCheckerProgram =
             CompileProgram(essl1_shaders::vs::Passthrough(), essl1_shaders::fs::Checkered());
         mBlueProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::Blue());
@@ -248,7 +246,7 @@
         glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
     }
 
-    virtual void TearDown()
+    void testTearDown() override
     {
         glDeleteProgram(mCheckerProgram);
         glDeleteProgram(mBlueProgram);
@@ -317,8 +315,6 @@
         {
             glDeleteFramebuffers(1, &mBGRAMultisampledFBO);
         }
-
-        ANGLETest::TearDown();
     }
 
     void multisampleTestHelper(GLuint readFramebuffer, GLuint drawFramebuffer)
diff --git a/src/tests/gl_tests/BufferDataTest.cpp b/src/tests/gl_tests/BufferDataTest.cpp
index 658a6ad..83289e8 100644
--- a/src/tests/gl_tests/BufferDataTest.cpp
+++ b/src/tests/gl_tests/BufferDataTest.cpp
@@ -31,10 +31,8 @@
         mAttribLocation = -1;
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(attribute vec4 position;
 attribute float in_attrib;
 varying float v_attrib;
@@ -69,12 +67,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mBuffer);
         glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mBuffer;
@@ -233,10 +229,8 @@
         setConfigDepthBits(24);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(attribute vec3 in_attrib;
 varying vec3 v_attrib;
 void main()
@@ -273,13 +267,11 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(2, mBuffers);
         glDeleteBuffers(1, &mElementBuffer);
         glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mBuffers[2];
diff --git a/src/tests/gl_tests/BuiltinVariableTest.cpp b/src/tests/gl_tests/BuiltinVariableTest.cpp
index fb68452..6da7875 100644
--- a/src/tests/gl_tests/BuiltinVariableTest.cpp
+++ b/src/tests/gl_tests/BuiltinVariableTest.cpp
@@ -26,10 +26,8 @@
         setConfigDepthBits(24);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             "#version 300 es\n"
             "precision highp float;\n"
@@ -69,14 +67,12 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mPositionBuffer);
         glDeleteBuffers(1, &mExpectedIdBuffer);
         glDeleteBuffers(1, &mIndexBuffer);
         glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
     }
 
     // Renders a primitive using the specified mode, each vertex color will
@@ -204,10 +200,8 @@
 class BuiltinVariableFragDepthClampingFloatRBOTest : public ANGLETest
 {
   protected:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         // Writes a fixed detph value and green.
         // Section 15.2.3 of the GL 4.5 specification says that conversion is not
         // done but clamping is so the output depth should be in [0.0, 1.0]
@@ -247,12 +241,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     void CheckDepthWritten(float expectedDepth, float fsDepth)
     {
diff --git a/src/tests/gl_tests/ClearTest.cpp b/src/tests/gl_tests/ClearTest.cpp
index 7fadc16..34c8c6d 100644
--- a/src/tests/gl_tests/ClearTest.cpp
+++ b/src/tests/gl_tests/ClearTest.cpp
@@ -50,17 +50,15 @@
         setConfigStencilBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mFBOs.resize(2, 0);
         glGenFramebuffers(2, mFBOs.data());
 
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (!mFBOs.empty())
         {
@@ -71,8 +69,6 @@
         {
             glDeleteTextures(static_cast<GLsizei>(mTextures.size()), mTextures.data());
         }
-
-        ANGLETest::TearDown();
     }
 
     std::vector<GLuint> mFBOs;
@@ -252,10 +248,8 @@
 class VulkanClearTest : public MaskedScissoredClearTestBase
 {
   protected:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETestWithParam::SetUp();
-
         glBindTexture(GL_TEXTURE_2D, mColorTexture);
         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, getWindowWidth(), getWindowHeight(), 0, GL_RGBA,
                      GL_UNSIGNED_BYTE, nullptr);
diff --git a/src/tests/gl_tests/ColorMaskTest.cpp b/src/tests/gl_tests/ColorMaskTest.cpp
index 671e72d..6075cf6 100644
--- a/src/tests/gl_tests/ColorMaskTest.cpp
+++ b/src/tests/gl_tests/ColorMaskTest.cpp
@@ -25,22 +25,15 @@
         setConfigDepthBits(24);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
         ASSERT_NE(0u, mProgram) << "shader compilation failed.";
 
         mColorUniform = glGetUniformLocation(mProgram, essl1_shaders::ColorUniform());
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram     = 0;
     GLint mColorUniform = -1;
diff --git a/src/tests/gl_tests/CopyCompressedTextureTest.cpp b/src/tests/gl_tests/CopyCompressedTextureTest.cpp
index 4c96d2b..d2c8915 100644
--- a/src/tests/gl_tests/CopyCompressedTextureTest.cpp
+++ b/src/tests/gl_tests/CopyCompressedTextureTest.cpp
@@ -24,10 +24,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenTextures(2, mTextures);
 
         constexpr char kVS[] =
@@ -59,12 +57,10 @@
         }
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(2, mTextures);
         glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
     }
 
     bool checkExtensions() const
diff --git a/src/tests/gl_tests/CopyTexImageTest.cpp b/src/tests/gl_tests/CopyTexImageTest.cpp
index 511bcf7..e4ce66b 100644
--- a/src/tests/gl_tests/CopyTexImageTest.cpp
+++ b/src/tests/gl_tests/CopyTexImageTest.cpp
@@ -23,10 +23,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             "precision highp float;\n"
             "attribute vec4 position;\n"
@@ -59,12 +57,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mTextureProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mTextureProgram); }
 
     void initializeResources(GLenum format, GLenum type)
     {
diff --git a/src/tests/gl_tests/CopyTexture3DTest.cpp b/src/tests/gl_tests/CopyTexture3DTest.cpp
index b97a2d2..f9a71db 100644
--- a/src/tests/gl_tests/CopyTexture3DTest.cpp
+++ b/src/tests/gl_tests/CopyTexture3DTest.cpp
@@ -26,10 +26,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         const char *vertexShaderSource   = getVertexShaderSource();
         const char *fragmentShaderSource = getFragmentShaderSource();
 
@@ -53,8 +51,6 @@
                "}\n";
     }
 
-    void TearDown() override { ANGLETest::TearDown(); }
-
     bool checkExtensions() const
     {
         if (!IsGLExtensionEnabled("GL_ANGLE_copy_texture_3d"))
diff --git a/src/tests/gl_tests/CopyTextureTest.cpp b/src/tests/gl_tests/CopyTextureTest.cpp
index 2f1fac5..86e10d4 100644
--- a/src/tests/gl_tests/CopyTextureTest.cpp
+++ b/src/tests/gl_tests/CopyTextureTest.cpp
@@ -26,10 +26,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenTextures(2, mTextures);
         glBindTexture(GL_TEXTURE_2D, mTextures[1]);
 
@@ -52,12 +50,10 @@
         }
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(2, mTextures);
         glDeleteFramebuffers(1, &mFramebuffer);
-
-        ANGLETest::TearDown();
     }
 
     bool checkExtensions() const
@@ -210,10 +206,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETestWithParam::SetUp();
-
         glGenTextures(2, mTextures);
         glBindTexture(GL_TEXTURE_2D, mTextures[1]);
 
@@ -236,12 +230,10 @@
         }
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(2, mTextures);
         glDeleteFramebuffers(1, &mFramebuffer);
-
-        ANGLETestWithParam::TearDown();
     }
 
     bool checkExtensions(GLenum sourceFormat, GLenum destFormat) const
diff --git a/src/tests/gl_tests/CubeMapTextureTest.cpp b/src/tests/gl_tests/CubeMapTextureTest.cpp
index 018c3ce..bbf9b81 100644
--- a/src/tests/gl_tests/CubeMapTextureTest.cpp
+++ b/src/tests/gl_tests/CubeMapTextureTest.cpp
@@ -21,10 +21,8 @@
         setConfigAlphaBits(8);
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
         if (mProgram == 0)
         {
@@ -45,12 +43,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    virtual void TearDown()
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram;
     GLint mColorLocation;
diff --git a/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp b/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
index 7cc5e39..7c4ec33 100644
--- a/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
+++ b/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
@@ -26,9 +26,8 @@
 class D3D11EmulatedIndexedBufferTest : public ANGLETest
 {
   protected:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
         ASSERT_EQ(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, GetParam().getRenderer());
 
         mContext                 = static_cast<gl::Context *>(getEGLWindow()->getContext());
@@ -56,11 +55,7 @@
         }
     }
 
-    void TearDown() override
-    {
-        SafeDelete(mSourceBuffer);
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { SafeDelete(mSourceBuffer); }
 
     void createMappableCompareBufferFromEmulatedBuffer(ID3D11Buffer *sourceBuffer,
                                                        GLuint size,
diff --git a/src/tests/gl_tests/D3DImageFormatConversionTest.cpp b/src/tests/gl_tests/D3DImageFormatConversionTest.cpp
index b2193cc..5ca24c7 100644
--- a/src/tests/gl_tests/D3DImageFormatConversionTest.cpp
+++ b/src/tests/gl_tests/D3DImageFormatConversionTest.cpp
@@ -28,10 +28,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -55,12 +53,7 @@
         mTexture2DUniformLocation = glGetUniformLocation(m2DProgram, "tex");
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(m2DProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(m2DProgram); }
 
     // Uses ColorStructType::writeColor to populate initial data for a texture, pass it to
     // glTexImage2D, then render with it. The resulting colors should match the colors passed into
diff --git a/src/tests/gl_tests/D3DTextureTest.cpp b/src/tests/gl_tests/D3DTextureTest.cpp
index b786a1a..a42857b 100644
--- a/src/tests/gl_tests/D3DTextureTest.cpp
+++ b/src/tests/gl_tests/D3DTextureTest.cpp
@@ -33,10 +33,8 @@
         setConfigStencilBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             R"(precision highp float;
             attribute vec4 position;
@@ -123,7 +121,7 @@
         }
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mTextureProgram);
 
@@ -141,8 +139,6 @@
             mD3D9Device->Release();
             mD3D9Device = nullptr;
         }
-
-        ANGLETest::TearDown();
     }
 
     EGLSurface createD3D11PBuffer(size_t width,
diff --git a/src/tests/gl_tests/DXT1CompressedTextureTest.cpp b/src/tests/gl_tests/DXT1CompressedTextureTest.cpp
index 7149789..5dfc8a4 100644
--- a/src/tests/gl_tests/DXT1CompressedTextureTest.cpp
+++ b/src/tests/gl_tests/DXT1CompressedTextureTest.cpp
@@ -24,10 +24,8 @@
         setConfigAlphaBits(8);
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -59,12 +57,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    virtual void TearDown()
-    {
-        glDeleteProgram(mTextureProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mTextureProgram); }
 
     GLuint mTextureProgram;
     GLint mTextureUniformLocation;
diff --git a/src/tests/gl_tests/DXTSRGBCompressedTextureTest.cpp b/src/tests/gl_tests/DXTSRGBCompressedTextureTest.cpp
index bb3fe16..7ec9a80 100644
--- a/src/tests/gl_tests/DXTSRGBCompressedTextureTest.cpp
+++ b/src/tests/gl_tests/DXTSRGBCompressedTextureTest.cpp
@@ -31,10 +31,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             "precision highp float;\n"
             "attribute vec4 position;\n"
@@ -62,12 +60,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mTextureProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mTextureProgram); }
 
     void runTestChecks(const TestCase &test)
     {
diff --git a/src/tests/gl_tests/DebugTest.cpp b/src/tests/gl_tests/DebugTest.cpp
index 906da4e..39d295b 100644
--- a/src/tests/gl_tests/DebugTest.cpp
+++ b/src/tests/gl_tests/DebugTest.cpp
@@ -26,10 +26,8 @@
         setDebugEnabled(true);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mDebugExtensionAvailable = IsGLExtensionEnabled("GL_KHR_debug");
         if (mDebugExtensionAvailable)
         {
diff --git a/src/tests/gl_tests/DepthStencilFormatsTest.cpp b/src/tests/gl_tests/DepthStencilFormatsTest.cpp
index 6304f44..78aff7e 100644
--- a/src/tests/gl_tests/DepthStencilFormatsTest.cpp
+++ b/src/tests/gl_tests/DepthStencilFormatsTest.cpp
@@ -64,10 +64,8 @@
         return (glGetError() == GL_NO_ERROR);
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -100,12 +98,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    virtual void TearDown()
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteTextures(1, &mTexture);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
diff --git a/src/tests/gl_tests/DepthStencilTest.cpp b/src/tests/gl_tests/DepthStencilTest.cpp
index 65d1ba3..633d001 100644
--- a/src/tests/gl_tests/DepthStencilTest.cpp
+++ b/src/tests/gl_tests/DepthStencilTest.cpp
@@ -33,10 +33,8 @@
         setConfigStencilBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glBindTexture(GL_TEXTURE_2D, mColorTexture);
         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, getWindowWidth(), getWindowHeight(), 0, GL_RGBA,
                      GL_UNSIGNED_BYTE, nullptr);
@@ -72,8 +70,6 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override { ANGLETest::TearDown(); }
-
     void bindColorStencilFBO()
     {
         glBindFramebuffer(GL_FRAMEBUFFER, mColorStencilFBO);
diff --git a/src/tests/gl_tests/DifferentStencilMasksTest.cpp b/src/tests/gl_tests/DifferentStencilMasksTest.cpp
index 028dfe9..57de47c 100644
--- a/src/tests/gl_tests/DifferentStencilMasksTest.cpp
+++ b/src/tests/gl_tests/DifferentStencilMasksTest.cpp
@@ -31,10 +31,8 @@
         setWebGLCompatibilityEnabled(true);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Zero(), essl1_shaders::fs::Blue());
         ASSERT_NE(0u, mProgram);
 
@@ -42,13 +40,11 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDisable(GL_STENCIL_TEST);
         if (mProgram != 0)
             glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
diff --git a/src/tests/gl_tests/DrawBuffersTest.cpp b/src/tests/gl_tests/DrawBuffersTest.cpp
index 87cf4bd..4380e86 100644
--- a/src/tests/gl_tests/DrawBuffersTest.cpp
+++ b/src/tests/gl_tests/DrawBuffersTest.cpp
@@ -23,13 +23,11 @@
         setConfigDepthBits(24);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteFramebuffers(1, &mFBO);
         glDeleteFramebuffers(1, &mReadFramebuffer);
         glDeleteTextures(4, mTextures);
-
-        ANGLETest::TearDown();
     }
 
     // We must call a different DrawBuffers method depending on extension support. Use this
diff --git a/src/tests/gl_tests/ETCTextureTest.cpp b/src/tests/gl_tests/ETCTextureTest.cpp
index d270b6c..0596ebb 100644
--- a/src/tests/gl_tests/ETCTextureTest.cpp
+++ b/src/tests/gl_tests/ETCTextureTest.cpp
@@ -27,20 +27,13 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenTextures(1, &mTexture);
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteTextures(1, &mTexture);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteTextures(1, &mTexture); }
 
     GLuint mTexture;
 };
diff --git a/src/tests/gl_tests/ErrorMessages.cpp b/src/tests/gl_tests/ErrorMessages.cpp
index 552ff62..ac159dd 100644
--- a/src/tests/gl_tests/ErrorMessages.cpp
+++ b/src/tests/gl_tests/ErrorMessages.cpp
@@ -68,8 +68,6 @@
         setConfigAlphaBits(8);
         setWebGLCompatibilityEnabled(true);
     }
-
-    void SetUp() override { ANGLETest::SetUp(); }
 };
 
 // Verify functionality of WebGL specific errors using KHR_debug
diff --git a/src/tests/gl_tests/FloatingPointSurfaceTest.cpp b/src/tests/gl_tests/FloatingPointSurfaceTest.cpp
index 1157784..92f64e4 100644
--- a/src/tests/gl_tests/FloatingPointSurfaceTest.cpp
+++ b/src/tests/gl_tests/FloatingPointSurfaceTest.cpp
@@ -24,10 +24,8 @@
         setConfigComponentType(EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kFS[] =
             "precision highp float;\n"
             "void main()\n"
@@ -41,12 +39,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram;
 };
diff --git a/src/tests/gl_tests/FramebufferMixedSamplesTest.cpp b/src/tests/gl_tests/FramebufferMixedSamplesTest.cpp
index 0736719..40727a7 100644
--- a/src/tests/gl_tests/FramebufferMixedSamplesTest.cpp
+++ b/src/tests/gl_tests/FramebufferMixedSamplesTest.cpp
@@ -33,10 +33,8 @@
                IsGLExtensionEnabled("GL_OES_rgb8_rgba8");
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
 
         GLuint position_loc = glGetAttribLocation(mProgram, essl1_shaders::PositionAttrib());
@@ -56,14 +54,12 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mVBO);
         glDeleteProgram(mProgram);
 
         ASSERT_GL_NO_ERROR();
-
-        ANGLETest::TearDown();
     }
 
     void prepareForDraw(SetupFBOType fbo_type)
diff --git a/src/tests/gl_tests/FramebufferMultiviewTest.cpp b/src/tests/gl_tests/FramebufferMultiviewTest.cpp
index bffa7e5..c2ba006 100644
--- a/src/tests/gl_tests/FramebufferMultiviewTest.cpp
+++ b/src/tests/gl_tests/FramebufferMultiviewTest.cpp
@@ -38,7 +38,7 @@
   protected:
     FramebufferMultiviewLayeredClearTest() : mMultiviewFBO(0), mDepthTex(0), mDepthStencilTex(0) {}
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mMultiviewFBO != 0)
         {
@@ -67,7 +67,7 @@
             glDeleteTextures(1, &mDepthTex);
             mDepthTex = 0u;
         }
-        MultiviewTest::TearDown();
+        MultiviewTest::testTearDown();
     }
 
     void initializeFBOs(int width,
diff --git a/src/tests/gl_tests/FramebufferRenderMipmapTest.cpp b/src/tests/gl_tests/FramebufferRenderMipmapTest.cpp
index 5cb7487..b6aa154 100644
--- a/src/tests/gl_tests/FramebufferRenderMipmapTest.cpp
+++ b/src/tests/gl_tests/FramebufferRenderMipmapTest.cpp
@@ -21,10 +21,8 @@
         setConfigAlphaBits(8);
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
         if (mProgram == 0)
         {
@@ -45,12 +43,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    virtual void TearDown()
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram;
     GLint mColorLocation;
diff --git a/src/tests/gl_tests/FramebufferTest.cpp b/src/tests/gl_tests/FramebufferTest.cpp
index 0fa3182..e4d4049 100644
--- a/src/tests/gl_tests/FramebufferTest.cpp
+++ b/src/tests/gl_tests/FramebufferTest.cpp
@@ -148,18 +148,14 @@
         EXPECT_GL_NO_ERROR();
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenFramebuffers(1, &mFramebuffer);
         glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
-        ANGLETest::TearDown();
-
         if (mTexture != 0)
         {
             glDeleteTextures(1, &mTexture);
diff --git a/src/tests/gl_tests/GLSLTest.cpp b/src/tests/gl_tests/GLSLTest.cpp
index d7fb96e..b30fe31 100644
--- a/src/tests/gl_tests/GLSLTest.cpp
+++ b/src/tests/gl_tests/GLSLTest.cpp
@@ -26,8 +26,6 @@
         setConfigAlphaBits(8);
     }
 
-    virtual void SetUp() { ANGLETest::SetUp(); }
-
     std::string GenerateVaryingType(GLint vectorSize)
     {
         char varyingType[10];
@@ -499,14 +497,10 @@
 };
 
 class GLSLTest_ES3 : public GLSLTest
-{
-    void SetUp() override { ANGLETest::SetUp(); }
-};
+{};
 
 class GLSLTest_ES31 : public GLSLTest
-{
-    void SetUp() override { ANGLETest::SetUp(); }
-};
+{};
 
 std::string BuillBigInitialStackShader(int length)
 {
diff --git a/src/tests/gl_tests/ImageTest.cpp b/src/tests/gl_tests/ImageTest.cpp
index fb3cce6..ef28cc2 100644
--- a/src/tests/gl_tests/ImageTest.cpp
+++ b/src/tests/gl_tests/ImageTest.cpp
@@ -40,10 +40,8 @@
         setConfigDepthBits(24);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             "precision highp float;\n"
             "attribute vec4 position;\n"
@@ -133,13 +131,11 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mTextureProgram);
         glDeleteProgram(mTextureExternalProgram);
         glDeleteProgram(mTextureExternalESSL3Program);
-
-        ANGLETest::TearDown();
     }
 
     void createEGLImage2DTextureSource(size_t width,
diff --git a/src/tests/gl_tests/IncompleteTextureTest.cpp b/src/tests/gl_tests/IncompleteTextureTest.cpp
index a2b24ed..73ed876 100644
--- a/src/tests/gl_tests/IncompleteTextureTest.cpp
+++ b/src/tests/gl_tests/IncompleteTextureTest.cpp
@@ -24,10 +24,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -56,12 +54,7 @@
         mTextureUniformLocation = glGetUniformLocation(mProgram, "tex");
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram;
     GLint mTextureUniformLocation;
diff --git a/src/tests/gl_tests/IndexBufferOffsetTest.cpp b/src/tests/gl_tests/IndexBufferOffsetTest.cpp
index cc9575b..52bfbcd 100644
--- a/src/tests/gl_tests/IndexBufferOffsetTest.cpp
+++ b/src/tests/gl_tests/IndexBufferOffsetTest.cpp
@@ -24,10 +24,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             R"(precision highp float;
             attribute vec2 position;
@@ -61,12 +59,11 @@
         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mVertexBuffer);
         glDeleteBuffers(1, &mIndexBuffer);
         glDeleteProgram(mProgram);
-        ANGLETest::TearDown();
     }
 
     void runTest(GLenum type, int typeWidth, void *indexData)
diff --git a/src/tests/gl_tests/IndexedPointsTest.cpp b/src/tests/gl_tests/IndexedPointsTest.cpp
index 27bc2ff..22387b7 100644
--- a/src/tests/gl_tests/IndexedPointsTest.cpp
+++ b/src/tests/gl_tests/IndexedPointsTest.cpp
@@ -27,10 +27,8 @@
 
     float getIndexPositionY(size_t idx) { return (idx == 2 || idx == 3) ? -0.5f : 0.5f; }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec2 position;
 
@@ -100,7 +98,7 @@
         glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices[0], GL_STATIC_DRAW);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mVertexBuffer);
         glDeleteBuffers(1, &mIndexBuffer);
@@ -108,7 +106,6 @@
 
         glDeleteBuffers(1, &mVertexWithColorBuffer);
         glDeleteProgram(mVertexWithColorBufferProgram);
-        ANGLETest::TearDown();
     }
 
     void runTest(GLuint firstIndex, bool useVertexBufferWithColor = false)
diff --git a/src/tests/gl_tests/InstancingTest.cpp b/src/tests/gl_tests/InstancingTest.cpp
index c555299..e65a6f4 100644
--- a/src/tests/gl_tests/InstancingTest.cpp
+++ b/src/tests/gl_tests/InstancingTest.cpp
@@ -46,19 +46,15 @@
         setConfigAlphaBits(8);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mInstanceBuffer);
         glDeleteProgram(mProgram[0]);
         glDeleteProgram(mProgram[1]);
-
-        ANGLETest::TearDown();
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         for (unsigned i = 0; i < kMaxDrawn; ++i)
         {
             mInstanceData[i] = i * kDrawSize;
diff --git a/src/tests/gl_tests/LineLoopTest.cpp b/src/tests/gl_tests/LineLoopTest.cpp
index 4b27ac6..829165b 100644
--- a/src/tests/gl_tests/LineLoopTest.cpp
+++ b/src/tests/gl_tests/LineLoopTest.cpp
@@ -23,10 +23,8 @@
         setConfigAlphaBits(8);
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
         if (mProgram == 0)
         {
@@ -43,12 +41,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    virtual void TearDown()
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     void runTest(GLenum indexType, GLuint indexBuffer, const void *indexPtr)
     {
diff --git a/src/tests/gl_tests/MaxTextureSizeTest.cpp b/src/tests/gl_tests/MaxTextureSizeTest.cpp
index 33bae35..dfcd199 100644
--- a/src/tests/gl_tests/MaxTextureSizeTest.cpp
+++ b/src/tests/gl_tests/MaxTextureSizeTest.cpp
@@ -21,10 +21,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -66,12 +64,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mTextureProgram);
         glDeleteProgram(mBlueProgram);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mTextureProgram;
diff --git a/src/tests/gl_tests/MipmapTest.cpp b/src/tests/gl_tests/MipmapTest.cpp
index e491209..882067a 100644
--- a/src/tests/gl_tests/MipmapTest.cpp
+++ b/src/tests/gl_tests/MipmapTest.cpp
@@ -123,10 +123,8 @@
         ASSERT_NE(0u, mCubeProgram);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         setUp2DProgram();
 
         setUpCubeProgram();
@@ -166,15 +164,13 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(m2DProgram);
         glDeleteProgram(mCubeProgram);
         glDeleteFramebuffers(1, &mOffscreenFramebuffer);
         glDeleteTextures(1, &mTexture2D);
         glDeleteTextures(1, &mTextureCube);
-
-        ANGLETest::TearDown();
     }
 
     std::vector<GLubyte> createRGBInitData(GLint width, GLint height, GLint r, GLint g, GLint b)
@@ -359,10 +355,8 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenTextures(1, &mTexture);
         ASSERT_GL_NO_ERROR();
 
@@ -372,7 +366,7 @@
         setUpCubeProgram();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTexture);
 
@@ -380,8 +374,6 @@
         glDeleteProgram(m3DProgram);
         glDeleteProgram(m2DProgram);
         glDeleteProgram(mCubeProgram);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mTexture;
diff --git a/src/tests/gl_tests/MultisampleCompatibilityTest.cpp b/src/tests/gl_tests/MultisampleCompatibilityTest.cpp
index f382188..404a075 100644
--- a/src/tests/gl_tests/MultisampleCompatibilityTest.cpp
+++ b/src/tests/gl_tests/MultisampleCompatibilityTest.cpp
@@ -32,10 +32,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
 
         GLuint position_loc = glGetAttribLocation(mProgram, essl1_shaders::PositionAttrib());
@@ -52,12 +50,10 @@
         glVertexAttribPointer(position_loc, 2, GL_FLOAT, GL_FALSE, 0, 0);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mVBO);
         glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
     }
 
     void prepareForDraw()
diff --git a/src/tests/gl_tests/MultiviewDrawTest.cpp b/src/tests/gl_tests/MultiviewDrawTest.cpp
index 003cea3..40390b2 100644
--- a/src/tests/gl_tests/MultiviewDrawTest.cpp
+++ b/src/tests/gl_tests/MultiviewDrawTest.cpp
@@ -241,13 +241,26 @@
 {
   protected:
     MultiviewRenderTest() : MultiviewFramebufferTestBase(GetParam(), GetParam().mSamples) {}
-    void SetUp() override { MultiviewFramebufferTestBase::FramebufferTestSetUp(); }
-    void TearDown() override { MultiviewFramebufferTestBase::FramebufferTestTearDown(); }
 
     void overrideWorkaroundsD3D(WorkaroundsD3D *workarounds) override
     {
         workarounds->selectViewInGeometryShader = GetParam().mForceUseGeometryShaderOnD3D;
     }
+
+    virtual void testSetUp() {}
+    virtual void testTearDown() {}
+
+  private:
+    void SetUp() override
+    {
+        MultiviewFramebufferTestBase::FramebufferTestSetUp();
+        testSetUp();
+    }
+    void TearDown() override
+    {
+        testTearDown();
+        MultiviewFramebufferTestBase::FramebufferTestTearDown();
+    }
 };
 
 constexpr char kDualViewVSSource[] = R"(#version 300 es
@@ -274,10 +287,8 @@
   protected:
     MultiviewRenderDualViewTest() : mProgram(0u) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        MultiviewRenderTest::SetUp();
-
         if (!requestMultiviewExtension(isMultisampled()))
         {
             return;
@@ -290,15 +301,13 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram != 0u)
         {
             glDeleteProgram(mProgram);
             mProgram = 0u;
         }
-
-        MultiviewRenderTest::TearDown();
     }
 
     void checkOutput()
@@ -395,20 +404,15 @@
   protected:
     MultiviewRenderPrimitiveTest() : mVBO(0u) {}
 
-    void SetUp() override
-    {
-        MultiviewRenderTest::SetUp();
-        glGenBuffers(1, &mVBO);
-    }
+    void testSetUp() override { glGenBuffers(1, &mVBO); }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mVBO)
         {
             glDeleteBuffers(1, &mVBO);
             mVBO = 0u;
         }
-        MultiviewRenderTest::TearDown();
     }
 
     void setupGeometry(const std::vector<Vector2> &vertexData)
diff --git a/src/tests/gl_tests/OcclusionQueriesTest.cpp b/src/tests/gl_tests/OcclusionQueriesTest.cpp
index 05b7614..5b25fea 100644
--- a/src/tests/gl_tests/OcclusionQueriesTest.cpp
+++ b/src/tests/gl_tests/OcclusionQueriesTest.cpp
@@ -25,20 +25,13 @@
         setConfigDepthBits(24);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::Red());
         ASSERT_NE(0u, mProgram);
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram;
     RNG mRNG;
diff --git a/src/tests/gl_tests/PBOExtensionTest.cpp b/src/tests/gl_tests/PBOExtensionTest.cpp
index 8ebf19a..10f3ae0 100644
--- a/src/tests/gl_tests/PBOExtensionTest.cpp
+++ b/src/tests/gl_tests/PBOExtensionTest.cpp
@@ -42,10 +42,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         if (IsGLExtensionEnabled("NV_pixel_buffer_object"))
         {
             glGenBuffers(1, &mPBO);
@@ -64,10 +62,8 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
-        ANGLETest::TearDown();
-
         glDeleteBuffers(1, &mPBO);
         glDeleteProgram(mProgram);
     }
diff --git a/src/tests/gl_tests/PackUnpackTest.cpp b/src/tests/gl_tests/PackUnpackTest.cpp
index fd3e1cc..fedac73 100644
--- a/src/tests/gl_tests/PackUnpackTest.cpp
+++ b/src/tests/gl_tests/PackUnpackTest.cpp
@@ -27,10 +27,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         // Fragment Shader source
         constexpr char kSNormFS[] = R"(#version 300 es
 precision mediump float;
@@ -93,15 +91,13 @@
         glClearBufferfv(GL_COLOR, 0, color);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mOffscreenTexture2D);
         glDeleteFramebuffers(1, &mOffscreenFramebuffer);
         glDeleteProgram(mSNormProgram);
         glDeleteProgram(mUNormProgram);
         glDeleteProgram(mHalfProgram);
-
-        ANGLETest::TearDown();
     }
 
     void compareBeforeAfter(GLuint program, float input1, float input2)
diff --git a/src/tests/gl_tests/ParallelShaderCompileTest.cpp b/src/tests/gl_tests/ParallelShaderCompileTest.cpp
index 501ba48..5a505f1 100644
--- a/src/tests/gl_tests/ParallelShaderCompileTest.cpp
+++ b/src/tests/gl_tests/ParallelShaderCompileTest.cpp
@@ -37,10 +37,6 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override { ANGLETest::SetUp(); }
-
-    void TearDown() override { ANGLETest::TearDown(); }
-
     bool ensureParallelShaderCompileExtensionAvailable()
     {
         if (IsGLExtensionRequestable("GL_KHR_parallel_shader_compile"))
diff --git a/src/tests/gl_tests/PathRenderingTest.cpp b/src/tests/gl_tests/PathRenderingTest.cpp
index 8b560c5..291ef06 100644
--- a/src/tests/gl_tests/PathRenderingTest.cpp
+++ b/src/tests/gl_tests/PathRenderingTest.cpp
@@ -1055,20 +1055,17 @@
 
     bool isApplicable() const { return IsGLExtensionEnabled("GL_CHROMIUM_path_rendering"); }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram)
         {
             glDeleteProgram(mProgram);
             ASSERT_GL_NO_ERROR();
         }
-
-        ANGLETest::TearDown();
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
         mBindUniformLocation = reinterpret_cast<PFNGLBINDUNIFORMLOCATIONCHROMIUMPROC>(
             eglGetProcAddress("glBindUniformLocationCHROMIUM"));
     }
diff --git a/src/tests/gl_tests/PbufferTest.cpp b/src/tests/gl_tests/PbufferTest.cpp
index 1c21ce8..5ebabda 100644
--- a/src/tests/gl_tests/PbufferTest.cpp
+++ b/src/tests/gl_tests/PbufferTest.cpp
@@ -23,10 +23,8 @@
         setConfigAlphaBits(8);
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             R"(precision highp float;
             attribute vec4 position;
@@ -93,14 +91,12 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    virtual void TearDown()
+    void testTearDown() override
     {
         glDeleteProgram(mTextureProgram);
 
         EGLWindow *window = getEGLWindow();
         eglDestroySurface(window->getDisplay(), mPbuffer);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mTextureProgram;
diff --git a/src/tests/gl_tests/PointSpritesTest.cpp b/src/tests/gl_tests/PointSpritesTest.cpp
index 5119052..0f9a373 100644
--- a/src/tests/gl_tests/PointSpritesTest.cpp
+++ b/src/tests/gl_tests/PointSpritesTest.cpp
@@ -40,8 +40,6 @@
         setConfigAlphaBits(8);
     }
 
-    virtual void SetUp() { ANGLETest::SetUp(); }
-
     float s2p(float s) { return (s + 1.0f) * 0.5f * (GLfloat)windowWidth; }
 
     void testPointCoordAndPointSizeCompliance(GLProgram program)
diff --git a/src/tests/gl_tests/ProgramBinaryTest.cpp b/src/tests/gl_tests/ProgramBinaryTest.cpp
index cfd1115..ab4b612 100644
--- a/src/tests/gl_tests/ProgramBinaryTest.cpp
+++ b/src/tests/gl_tests/ProgramBinaryTest.cpp
@@ -33,10 +33,8 @@
         forceNewDisplay();
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::Red());
         if (mProgram == 0)
         {
@@ -51,11 +49,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteBuffers(1, &mBuffer);
-        ANGLETest::TearDown();
     }
 
     GLint getAvailableProgramBinaryFormatCount() const
@@ -227,8 +224,7 @@
     ASSERT_GL_NO_ERROR();
 
     // Shutdown and restart GL entirely.
-    TearDown();
-    SetUp();
+    recreateTestFixture();
 
     ANGLE_GL_BINARY_OES_PROGRAM(binaryProgram, binaryBlob, binaryFormat);
     ASSERT_GL_NO_ERROR();
@@ -565,10 +561,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(#version 300 es
 in vec4 inputAttribute;
 out vec4 outputVarying;
@@ -598,12 +592,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLint getAvailableProgramBinaryFormatCount() const
     {
diff --git a/src/tests/gl_tests/ProvokingVertexTest.cpp b/src/tests/gl_tests/ProvokingVertexTest.cpp
index 148aa21..05840a6 100644
--- a/src/tests/gl_tests/ProvokingVertexTest.cpp
+++ b/src/tests/gl_tests/ProvokingVertexTest.cpp
@@ -36,10 +36,8 @@
         setConfigDepthBits(24);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             "#version 300 es\n"
             "in int intAttrib;\n"
@@ -78,7 +76,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram != 0)
         {
@@ -109,8 +107,6 @@
             glDeleteBuffers(1, &mBuffer);
             mBuffer = 0;
         }
-
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
diff --git a/src/tests/gl_tests/ReadPixelsTest.cpp b/src/tests/gl_tests/ReadPixelsTest.cpp
index 649ef3b..069b749 100644
--- a/src/tests/gl_tests/ReadPixelsTest.cpp
+++ b/src/tests/gl_tests/ReadPixelsTest.cpp
@@ -66,10 +66,8 @@
   protected:
     ReadPixelsPBOTest() : mPBO(0), mTexture(0), mFBO(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenBuffers(1, &mPBO);
         glGenFramebuffers(1, &mFBO);
 
@@ -94,13 +92,11 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mPBO);
         glDeleteTextures(1, &mTexture);
         glDeleteFramebuffers(1, &mFBO);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mPBO     = 0;
@@ -282,9 +278,9 @@
   protected:
     ReadPixelsPBODrawTest() : mProgram(0), mPositionVBO(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ReadPixelsPBOTest::SetUp();
+        ReadPixelsPBOTest::testSetUp();
 
         constexpr char kVS[] =
             "attribute vec4 aTest; attribute vec2 aPosition; varying vec4 vTest;\n"
@@ -311,11 +307,11 @@
         glBindBuffer(GL_ARRAY_BUFFER, 0);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteBuffers(1, &mPositionVBO);
-        ReadPixelsPBOTest::TearDown();
+        ReadPixelsPBOTest::testTearDown();
     }
 
     GLuint mProgram;
@@ -376,10 +372,8 @@
   protected:
     ReadPixelsMultisampleTest() : mFBO(0), mRBO(0), mPBO(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenFramebuffers(1, &mFBO);
         glBindFramebuffer(GL_FRAMEBUFFER, mFBO);
 
@@ -395,10 +389,8 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
-        ANGLETest::TearDown();
-
         glDeleteFramebuffers(1, &mFBO);
         glDeleteRenderbuffers(1, &mRBO);
         glDeleteBuffers(1, &mPBO);
@@ -455,21 +447,17 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenTextures(1, &mTexture);
         glGenFramebuffers(1, &mFBO);
         glBindFramebuffer(GL_FRAMEBUFFER, mFBO);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteFramebuffers(1, &mFBO);
         glDeleteTextures(1, &mTexture);
-
-        ANGLETest::TearDown();
     }
 
     void initTexture(GLenum textureTarget,
@@ -667,10 +655,8 @@
   protected:
     ReadPixelsErrorTest() : mTexture(0), mFBO(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenTextures(1, &mTexture);
         glBindTexture(GL_TEXTURE_2D, mTexture);
         glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 1);
@@ -683,10 +669,8 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
-        ANGLETest::TearDown();
-
         glDeleteTextures(1, &mTexture);
         glDeleteFramebuffers(1, &mFBO);
     }
diff --git a/src/tests/gl_tests/RenderbufferMultisampleTest.cpp b/src/tests/gl_tests/RenderbufferMultisampleTest.cpp
index 688a958..c72fdd5 100644
--- a/src/tests/gl_tests/RenderbufferMultisampleTest.cpp
+++ b/src/tests/gl_tests/RenderbufferMultisampleTest.cpp
@@ -27,21 +27,17 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenRenderbuffers(1, &mRenderbuffer);
 
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteRenderbuffers(1, &mRenderbuffer);
         mRenderbuffer = 0;
-
-        ANGLETest::TearDown();
     }
 
     GLuint mRenderbuffer = 0;
diff --git a/src/tests/gl_tests/RobustBufferAccessBehaviorTest.cpp b/src/tests/gl_tests/RobustBufferAccessBehaviorTest.cpp
index 7b2b95e..3629186 100644
--- a/src/tests/gl_tests/RobustBufferAccessBehaviorTest.cpp
+++ b/src/tests/gl_tests/RobustBufferAccessBehaviorTest.cpp
@@ -34,11 +34,7 @@
         forceNewDisplay();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     bool initExtension()
     {
@@ -48,10 +44,7 @@
         {
             return false;
         }
-
-        ANGLETest::TearDown();
         setRobustAccess(true);
-        ANGLETest::SetUp();
         if (!IsGLExtensionEnabled("GL_KHR_robust_buffer_access_behavior"))
         {
             return false;
diff --git a/src/tests/gl_tests/SRGBFramebufferTest.cpp b/src/tests/gl_tests/SRGBFramebufferTest.cpp
index 9afb372..517e6c1 100644
--- a/src/tests/gl_tests/SRGBFramebufferTest.cpp
+++ b/src/tests/gl_tests/SRGBFramebufferTest.cpp
@@ -25,10 +25,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
         ASSERT_NE(0u, mProgram);
 
@@ -36,12 +34,7 @@
         ASSERT_NE(-1, mColorLocation);
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram      = 0;
     GLint mColorLocation = -1;
diff --git a/src/tests/gl_tests/SRGBTextureTest.cpp b/src/tests/gl_tests/SRGBTextureTest.cpp
index 9592723..b685295 100644
--- a/src/tests/gl_tests/SRGBTextureTest.cpp
+++ b/src/tests/gl_tests/SRGBTextureTest.cpp
@@ -23,10 +23,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             "precision highp float;\n"
             "attribute vec4 position;\n"
@@ -55,12 +53,7 @@
         ASSERT_NE(-1, mTextureLocation);
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLenum getSRGBA8TextureInternalFormat() const
     {
diff --git a/src/tests/gl_tests/SixteenBppTextureTest.cpp b/src/tests/gl_tests/SixteenBppTextureTest.cpp
index 4e18d62..d32a9d4 100644
--- a/src/tests/gl_tests/SixteenBppTextureTest.cpp
+++ b/src/tests/gl_tests/SixteenBppTextureTest.cpp
@@ -46,10 +46,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -73,12 +71,7 @@
         mTexture2DUniformLocation = glGetUniformLocation(m2DProgram, "tex");
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(m2DProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(m2DProgram); }
 
     void simpleValidationBase(GLuint tex)
     {
diff --git a/src/tests/gl_tests/StateChangeTest.cpp b/src/tests/gl_tests/StateChangeTest.cpp
index 60da74e..c7313ca 100644
--- a/src/tests/gl_tests/StateChangeTest.cpp
+++ b/src/tests/gl_tests/StateChangeTest.cpp
@@ -32,10 +32,8 @@
         setNoErrorEnabled(true);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenFramebuffers(1, &mFramebuffer);
         glGenTextures(2, mTextures.data());
         glGenRenderbuffers(1, &mRenderbuffer);
@@ -43,7 +41,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mFramebuffer != 0)
         {
@@ -58,8 +56,6 @@
         }
 
         glDeleteRenderbuffers(1, &mRenderbuffer);
-
-        ANGLETest::TearDown();
     }
 
     GLuint mFramebuffer           = 0;
@@ -607,9 +603,9 @@
   protected:
     StateChangeRenderTest() : mProgram(0), mRenderbuffer(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        StateChangeTest::SetUp();
+        StateChangeTest::testSetUp();
 
         constexpr char kVS[] =
             "attribute vec2 position;\n"
@@ -628,12 +624,12 @@
         glGenRenderbuffers(1, &mRenderbuffer);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteRenderbuffers(1, &mRenderbuffer);
 
-        StateChangeTest::TearDown();
+        StateChangeTest::testTearDown();
     }
 
     void setUniformColor(const GLColor &color)
@@ -1279,10 +1275,8 @@
 class SimpleStateChangeTestES31 : public SimpleStateChangeTest
 {
   protected:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenFramebuffers(1, &mFramebuffer);
         glGenTextures(1, &mTexture);
 
@@ -1312,7 +1306,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mFramebuffer != 0)
         {
@@ -1326,7 +1320,6 @@
             mTexture = 0;
         }
         glDeleteProgram(mProgram);
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
diff --git a/src/tests/gl_tests/SwizzleTest.cpp b/src/tests/gl_tests/SwizzleTest.cpp
index 35ff866..1196ade 100644
--- a/src/tests/gl_tests/SwizzleTest.cpp
+++ b/src/tests/gl_tests/SwizzleTest.cpp
@@ -60,10 +60,8 @@
         }
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(precision highp float;
 attribute vec4 position;
 varying vec2 texcoord;
@@ -93,12 +91,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteTextures(1, &mTexture);
-
-        ANGLETest::TearDown();
     }
 
     template <typename T>
@@ -204,10 +200,8 @@
 class SwizzleIntegerTest : public SwizzleTest
 {
   protected:
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] =
             "#version 300 es\n"
             "precision highp float;\n"
diff --git a/src/tests/gl_tests/SyncQueriesTest.cpp b/src/tests/gl_tests/SyncQueriesTest.cpp
index a58219b..f911550 100644
--- a/src/tests/gl_tests/SyncQueriesTest.cpp
+++ b/src/tests/gl_tests/SyncQueriesTest.cpp
@@ -25,15 +25,13 @@
         setConfigDepthBits(24);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mQuery != 0)
         {
             glDeleteQueriesEXT(1, &mQuery);
             mQuery = 0;
         }
-
-        ANGLETest::TearDown();
     }
 
     GLuint mQuery = 0;
diff --git a/src/tests/gl_tests/TextureMultisampleTest.cpp b/src/tests/gl_tests/TextureMultisampleTest.cpp
index 6081605..539aacd 100644
--- a/src/tests/gl_tests/TextureMultisampleTest.cpp
+++ b/src/tests/gl_tests/TextureMultisampleTest.cpp
@@ -42,24 +42,20 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenFramebuffers(1, &mFramebuffer);
         glGenTextures(1, &mTexture);
 
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteFramebuffers(1, &mFramebuffer);
         mFramebuffer = 0;
         glDeleteTextures(1, &mTexture);
         mTexture = 0;
-
-        ANGLETest::TearDown();
     }
 
     void texStorageMultisample(GLenum target,
diff --git a/src/tests/gl_tests/TextureTest.cpp b/src/tests/gl_tests/TextureTest.cpp
index a4b292e..9de0ea0 100644
--- a/src/tests/gl_tests/TextureTest.cpp
+++ b/src/tests/gl_tests/TextureTest.cpp
@@ -72,20 +72,14 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void SetUp() override
-    {
-        ANGLETest::SetUp();
+    void testSetUp() override { setUpFramebuffer(); }
 
-        setUpFramebuffer();
-    }
-
-    void TearDown() override
+    void testTearDown() override
     {
         glBindFramebuffer(GL_FRAMEBUFFER, 0);
         glDeleteFramebuffers(1, &mFramebuffer);
         glDeleteTextures(1, &mFramebufferColorTexture);
         glDeleteProgram(mProgram);
-        ANGLETest::TearDown();
     }
 
     void setUpFramebuffer()
@@ -155,18 +149,18 @@
         ASSERT_NE(-1, mTexture2DUniformLocation);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
         mTexture2D = create2DTexture();
 
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTexture2D);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     // Tests CopyTexSubImage with floating point textures of various formats.
@@ -350,9 +344,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        Texture2DTest::SetUp();
+        Texture2DTest::testSetUp();
         setUpProgram();
     }
 };
@@ -389,9 +383,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        Texture2DTest::SetUp();
+        Texture2DTest::testSetUp();
         setUpProgram();
     }
 };
@@ -428,9 +422,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        Texture2DTest::SetUp();
+        Texture2DTest::testSetUp();
         setUpProgram();
     }
 };
@@ -456,9 +450,9 @@
             })";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        Texture2DTest::SetUp();
+        Texture2DTest::testSetUp();
 
         setUpProgram();
 
@@ -497,9 +491,9 @@
             })";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        Texture2DTest::SetUp();
+        Texture2DTest::testSetUp();
         setUpProgram();
     }
 };
@@ -530,9 +524,9 @@
             })";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
 
         glGenTextures(1, &mTextureCube);
         glBindTexture(GL_TEXTURE_CUBE_MAP, mTextureCube);
@@ -553,10 +547,10 @@
         ASSERT_NE(-1, mTextureCubeUniformLocation);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTextureCube);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     GLuint mTexture2D;
@@ -595,9 +589,9 @@
             })";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
 
         setUpProgram();
 
@@ -611,11 +605,11 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTexture2DA);
         glDeleteTextures(1, &mTexture2DB);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     void testSamplerArrayDraw()
@@ -705,9 +699,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
 
         setUpProgram();
 
@@ -718,10 +712,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &m2DArrayTexture);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     GLuint m2DArrayTexture;
@@ -755,9 +749,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
 
         setUpProgram();
 
@@ -771,11 +765,11 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTexture2DA);
         glDeleteTextures(1, &mTexture2DB);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     GLuint mTexture2DA;
@@ -814,9 +808,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
 
         glGenTextures(1, &mTexture3D);
 
@@ -826,10 +820,10 @@
         ASSERT_NE(-1, mTexture3DUniformLocation);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTexture3D);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     GLuint mTexture3D;
@@ -876,9 +870,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
 
         glGenTextures(1, &mTexture3D);
 
@@ -896,11 +890,11 @@
         ASSERT_NE(-1, mDepthRefUniformLocation);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTextureShadow);
         glDeleteTextures(1, &mTexture3D);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     GLuint mTextureShadow;
@@ -959,9 +953,9 @@
                "}\n";
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        TexCoordDrawTest::SetUp();
+        TexCoordDrawTest::testSetUp();
 
         glGenTextures(1, &mTexture2D);
         glGenTextures(1, &mTextureCube);
@@ -990,13 +984,13 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(1, &mTexture2D);
         glDeleteTextures(1, &mTextureCube);
         glDeleteTextures(1, &mTexture2DShadow);
         glDeleteTextures(1, &mTextureCubeShadow);
-        TexCoordDrawTest::TearDown();
+        TexCoordDrawTest::testTearDown();
     }
 
     GLuint mTexture2D;
@@ -3390,10 +3384,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &mMaxVertexTextures);
         glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &mMaxFragmentTextures);
         glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &mMaxCombinedTextures);
@@ -3401,7 +3393,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram != 0)
         {
@@ -3413,8 +3405,6 @@
                 glDeleteTextures(static_cast<GLsizei>(mTextures.size()), &mTextures[0]);
             }
         }
-
-        ANGLETest::TearDown();
     }
 
     void compileProgramWithTextureCounts(const std::string &vertexPrefix,
@@ -3703,9 +3693,9 @@
   protected:
     Texture2DNorm16TestES3() : Texture2DTestES3(), mTextures{0, 0, 0}, mFBO(0), mRenderbuffer(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        Texture2DTestES3::SetUp();
+        Texture2DTestES3::testSetUp();
 
         glActiveTexture(GL_TEXTURE0);
         glGenTextures(3, mTextures);
@@ -3724,13 +3714,13 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteTextures(3, mTextures);
         glDeleteFramebuffers(1, &mFBO);
         glDeleteRenderbuffers(1, &mRenderbuffer);
 
-        Texture2DTestES3::TearDown();
+        Texture2DTestES3::testTearDown();
     }
 
     void testNorm16Texture(GLint internalformat, GLenum format, GLenum type)
diff --git a/src/tests/gl_tests/TimerQueriesTest.cpp b/src/tests/gl_tests/TimerQueriesTest.cpp
index 1f399fc..e9cb613 100644
--- a/src/tests/gl_tests/TimerQueriesTest.cpp
+++ b/src/tests/gl_tests/TimerQueriesTest.cpp
@@ -28,10 +28,8 @@
         setConfigDepthBits(24);
     }
 
-    virtual void SetUp()
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kCostlyVS[] =
             "attribute highp vec4 position; varying highp vec4 testPos; void main(void)\n"
             "{\n"
@@ -57,11 +55,10 @@
         ASSERT_NE(0u, mProgramCostly) << "shader compilation failed.";
     }
 
-    virtual void TearDown()
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteProgram(mProgramCostly);
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
diff --git a/src/tests/gl_tests/TransformFeedbackTest.cpp b/src/tests/gl_tests/TransformFeedbackTest.cpp
index 1ba3719..e7e908d 100644
--- a/src/tests/gl_tests/TransformFeedbackTest.cpp
+++ b/src/tests/gl_tests/TransformFeedbackTest.cpp
@@ -28,10 +28,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenBuffers(1, &mTransformFeedbackBuffer);
         glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, mTransformFeedbackBuffer);
         glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, mTransformFeedbackBufferSize, nullptr,
@@ -42,7 +40,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram != 0)
         {
@@ -61,8 +59,6 @@
             glDeleteTransformFeedbacks(1, &mTransformFeedback);
             mTransformFeedback = 0;
         }
-
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
@@ -1044,10 +1040,8 @@
   protected:
     TransformFeedbackLifetimeTest() : mVertexArray(0) {}
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glGenVertexArrays(1, &mVertexArray);
         glBindVertexArray(mVertexArray);
 
@@ -1066,10 +1060,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteVertexArrays(1, &mVertexArray);
-        TransformFeedbackTest::TearDown();
+        TransformFeedbackTest::testTearDown();
     }
 
     GLuint mVertexArray;
diff --git a/src/tests/gl_tests/UniformBufferTest.cpp b/src/tests/gl_tests/UniformBufferTest.cpp
index 01a981f..8554b31 100644
--- a/src/tests/gl_tests/UniformBufferTest.cpp
+++ b/src/tests/gl_tests/UniformBufferTest.cpp
@@ -25,10 +25,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mkFS = R"(#version 300 es
 precision highp float;
 uniform uni { vec4 color; };
@@ -49,11 +47,10 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteBuffers(1, &mUniformBuffer);
         glDeleteProgram(mProgram);
-        ANGLETest::TearDown();
     }
 
     const char *mkFS;
diff --git a/src/tests/gl_tests/UniformTest.cpp b/src/tests/gl_tests/UniformTest.cpp
index 0d98653..e96cae2 100644
--- a/src/tests/gl_tests/UniformTest.cpp
+++ b/src/tests/gl_tests/UniformTest.cpp
@@ -322,10 +322,8 @@
         setConfigAlphaBits(8);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = "void main() { gl_Position = vec4(1); }";
         constexpr char kFS[] =
             "precision mediump float;\n"
@@ -357,11 +355,7 @@
         ASSERT_GL_NO_ERROR();
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram;
     GLint mUniformFLocation;
@@ -677,15 +671,13 @@
   protected:
     UniformTestES3() : mProgram(0) {}
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram != 0)
         {
             glDeleteProgram(mProgram);
             mProgram = 0;
         }
-
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
@@ -1100,15 +1092,13 @@
   protected:
     UniformTestES31() : mProgram(0) {}
 
-    void TearDown() override
+    void testTearDown() override
     {
         if (mProgram != 0)
         {
             glDeleteProgram(mProgram);
             mProgram = 0;
         }
-
-        ANGLETest::TearDown();
     }
 
     GLuint mProgram;
diff --git a/src/tests/gl_tests/UnpackAlignmentTest.cpp b/src/tests/gl_tests/UnpackAlignmentTest.cpp
index ce5876c..698f1c0 100644
--- a/src/tests/gl_tests/UnpackAlignmentTest.cpp
+++ b/src/tests/gl_tests/UnpackAlignmentTest.cpp
@@ -27,10 +27,8 @@
         mProgram = 0;
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kFS[] = R"(uniform sampler2D tex;
 void main()
 {
@@ -44,12 +42,7 @@
         }
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     void getPixelSize(GLenum format, GLenum type, unsigned int *size)
     {
diff --git a/src/tests/gl_tests/UnpackRowLength.cpp b/src/tests/gl_tests/UnpackRowLength.cpp
index ffd09b9..a5168ff 100644
--- a/src/tests/gl_tests/UnpackRowLength.cpp
+++ b/src/tests/gl_tests/UnpackRowLength.cpp
@@ -27,10 +27,8 @@
         mProgram = 0;
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kFS[] = R"(uniform sampler2D tex;
 void main()
 {
@@ -44,12 +42,7 @@
         }
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     void testRowLength(int texSize, int rowLength)
     {
diff --git a/src/tests/gl_tests/VertexAttributeTest.cpp b/src/tests/gl_tests/VertexAttributeTest.cpp
index a561f9e..75e5eb6 100644
--- a/src/tests/gl_tests/VertexAttributeTest.cpp
+++ b/src/tests/gl_tests/VertexAttributeTest.cpp
@@ -186,10 +186,8 @@
         }
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         glClearColor(0, 0, 0, 0);
         glClearDepthf(0.0);
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -199,13 +197,11 @@
         glGenBuffers(1, &mBuffer);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
         glDeleteProgram(mProgram);
         glDeleteBuffers(1, &mBuffer);
         glDeleteBuffers(1, &mQuadBuffer);
-
-        ANGLETest::TearDown();
     }
 
     // Override a feature to force emulation of attribute formats.
@@ -1041,9 +1037,9 @@
         glEnableVertexAttribArray(mExpectedAttrib);
     }
 
-    void TearDown() override
+    void testTearDown() override
     {
-        VertexAttributeTestES3::TearDown();
+        VertexAttributeTestES3::testTearDown();
 
         glDeleteBuffers(1, &mExpectedBuffer);
         glDeleteVertexArrays(1, &mVAO);
@@ -1530,7 +1526,7 @@
   protected:
     VertexAttributeCachingTest() {}
 
-    void SetUp() override;
+    void testSetUp() override;
 
     template <typename DestT>
     static std::vector<GLfloat> GetExpectedData(const std::vector<GLubyte> &srcData,
@@ -1625,9 +1621,9 @@
     return expectedData;
 }
 
-void VertexAttributeCachingTest::SetUp()
+void VertexAttributeCachingTest::testSetUp()
 {
-    VertexAttributeTest::SetUp();
+    VertexAttributeTest::testSetUp();
 
     glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
 
diff --git a/src/tests/gl_tests/ViewportTest.cpp b/src/tests/gl_tests/ViewportTest.cpp
index 574b0ff..6ce7644 100644
--- a/src/tests/gl_tests/ViewportTest.cpp
+++ b/src/tests/gl_tests/ViewportTest.cpp
@@ -122,10 +122,8 @@
         }
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::Red());
         if (mProgram == 0)
         {
@@ -145,12 +143,7 @@
         glDisable(GL_DEPTH_TEST);
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     GLuint mProgram;
 };
diff --git a/src/tests/gl_tests/WebGLCompatibilityTest.cpp b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
index 8939251..77c6c32 100644
--- a/src/tests/gl_tests/WebGLCompatibilityTest.cpp
+++ b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
@@ -67,9 +67,8 @@
         setWebGLCompatibilityEnabled(true);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
         glRequestExtensionANGLE = reinterpret_cast<PFNGLREQUESTEXTENSIONANGLEPROC>(
             eglGetProcAddress("glRequestExtensionANGLE"));
     }
diff --git a/src/tests/gl_tests/WebGLReadOutsideFramebufferTest.cpp b/src/tests/gl_tests/WebGLReadOutsideFramebufferTest.cpp
index fd4d35f..db8c613 100644
--- a/src/tests/gl_tests/WebGLReadOutsideFramebufferTest.cpp
+++ b/src/tests/gl_tests/WebGLReadOutsideFramebufferTest.cpp
@@ -231,10 +231,8 @@
         setWebGLCompatibilityEnabled(true);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
-
         constexpr char kVS[] = R"(
 attribute vec3 a_position;
 varying vec2 v_texCoord;
@@ -266,11 +264,7 @@
         drawQuad(mProgram, "a_position", 0.0f, 1.0f, true);
     }
 
-    void TearDown() override
-    {
-        glDeleteProgram(mProgram);
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { glDeleteProgram(mProgram); }
 
     using TestFunc = void (WebGLReadOutsideFramebufferTest::*)(int x,
                                                                int y,
diff --git a/src/tests/gl_tests/gles1/DrawTextureTest.cpp b/src/tests/gl_tests/gles1/DrawTextureTest.cpp
index 5a39af5..d5e4ef2 100644
--- a/src/tests/gl_tests/gles1/DrawTextureTest.cpp
+++ b/src/tests/gl_tests/gles1/DrawTextureTest.cpp
@@ -28,19 +28,14 @@
         setConfigDepthBits(24);
     }
 
-    void SetUp() override
+    void testSetUp() override
     {
-        ANGLETest::SetUp();
         mTexture.reset(new GLTexture());
         glEnable(GL_TEXTURE_2D);
         glBindTexture(GL_TEXTURE_2D, mTexture->get());
     }
 
-    void TearDown() override
-    {
-        mTexture.reset();
-        ANGLETest::TearDown();
-    }
+    void testTearDown() override { mTexture.reset(); }
 
     std::unique_ptr<GLTexture> mTexture;
 };
diff --git a/src/tests/gles1_conformance_tests/ConformanceTests.cpp b/src/tests/gles1_conformance_tests/ConformanceTests.cpp
index 92872d8..5098d32 100644
--- a/src/tests/gles1_conformance_tests/ConformanceTests.cpp
+++ b/src/tests/gles1_conformance_tests/ConformanceTests.cpp
@@ -128,11 +128,7 @@
         setConfigStencilBits(8);
     }
 
-    void SetUp() override
-    {
-        ANGLETest::SetUp();
-        ExtTestDriverSetup();
-    }
+    void testSetUp() override { ExtTestDriverSetup(); }
 };
 
 TEST_P(GLES1ConformanceTest, AmbLight)
diff --git a/src/tests/test_utils/ANGLETest.cpp b/src/tests/test_utils/ANGLETest.cpp
index 139d5c7..e9d473c 100644
--- a/src/tests/test_utils/ANGLETest.cpp
+++ b/src/tests/test_utils/ANGLETest.cpp
@@ -287,9 +287,10 @@
 
 using namespace angle;
 
+PlatformMethods gDefaultPlatformMethods;
+
 namespace
 {
-PlatformMethods gDefaultPlatformMethods;
 TestPlatformContext gPlatformContext;
 
 // After a fixed number of iterations we reset the test window. This works around some driver bugs.
@@ -374,6 +375,8 @@
       mDeferContextInit(false),
       mAlwaysForceNewDisplay(ShouldAlwaysForceNewDisplay()),
       mForceNewDisplay(mAlwaysForceNewDisplay),
+      mSetUpCalled(false),
+      mTearDownCalled(false),
       mCurrentParams(nullptr),
       mFixture(nullptr)
 {
@@ -472,10 +475,22 @@
     {
         glDeleteProgram(m3DTexturedQuadProgram);
     }
+
+    if (!mSetUpCalled)
+    {
+        GTEST_NONFATAL_FAILURE_("SetUp not called.");
+    }
+
+    if (!mTearDownCalled)
+    {
+        GTEST_NONFATAL_FAILURE_("TearDown not called.");
+    }
 }
 
 void ANGLETestBase::ANGLETestSetUp()
 {
+    mSetUpCalled = true;
+
     gDefaultPlatformMethods.overrideWorkaroundsD3D = TestPlatform_overrideWorkaroundsD3D;
     gDefaultPlatformMethods.overrideFeaturesVk     = TestPlatform_overrideFeaturesVk;
     gDefaultPlatformMethods.logError               = TestPlatform_logError;
@@ -568,6 +583,7 @@
 
 void ANGLETestBase::ANGLETestTearDown()
 {
+    mTearDownCalled              = true;
     gPlatformContext.currentTest = nullptr;
 
     if (IsWindows())
@@ -1145,10 +1161,9 @@
     mFixture->configParams.robustResourceInit = enabled;
 }
 
-void ANGLETestBase::setContextProgramCacheEnabled(bool enabled, CacheProgramFunc cacheProgramFunc)
+void ANGLETestBase::setContextProgramCacheEnabled(bool enabled)
 {
     mFixture->configParams.contextProgramCacheEnabled = enabled;
-    gDefaultPlatformMethods.cacheProgram              = cacheProgramFunc;
 }
 
 void ANGLETestBase::setContextResetStrategy(EGLenum resetStrategy)
diff --git a/src/tests/test_utils/ANGLETest.h b/src/tests/test_utils/ANGLETest.h
index 2c8fbd1..600c9bc 100644
--- a/src/tests/test_utils/ANGLETest.h
+++ b/src/tests/test_utils/ANGLETest.h
@@ -362,7 +362,7 @@
     void setBindGeneratesResource(bool bindGeneratesResource);
     void setClientArraysEnabled(bool enabled);
     void setRobustResourceInit(bool enabled);
-    void setContextProgramCacheEnabled(bool enabled, angle::CacheProgramFunc cacheProgramFunc);
+    void setContextProgramCacheEnabled(bool enabled);
     void setContextResetStrategy(EGLenum resetStrategy);
     void forceNewDisplay();
 
@@ -452,6 +452,9 @@
     bool mAlwaysForceNewDisplay;
     bool mForceNewDisplay;
 
+    bool mSetUpCalled;
+    bool mTearDownCalled;
+
     // On most systems we force a new display on every test instance. For these configs we can
     // share a single OSWindow instance. With display reuse we need a separate OSWindow for each
     // different config. This OSWindow sharing seemed to lead to driver bugs on some platforms.
@@ -471,10 +474,27 @@
   protected:
     ANGLETestWithParam();
 
-  public:
-    void SetUp() override { ANGLETestBase::ANGLETestSetUp(); }
+    virtual void testSetUp() {}
+    virtual void testTearDown() {}
 
-    void TearDown() override { ANGLETestBase::ANGLETestTearDown(); }
+    void recreateTestFixture()
+    {
+        TearDown();
+        SetUp();
+    }
+
+  private:
+    void SetUp() final
+    {
+        ANGLETestBase::ANGLETestSetUp();
+        testSetUp();
+    }
+
+    void TearDown() final
+    {
+        testTearDown();
+        ANGLETestBase::ANGLETestTearDown();
+    }
 };
 
 template <typename Params>
@@ -537,6 +557,8 @@
 bool IsGLExtensionEnabled(const std::string &extName);
 bool IsGLExtensionRequestable(const std::string &extName);
 
+extern angle::PlatformMethods gDefaultPlatformMethods;
+
 #define ANGLE_SKIP_TEST_IF(COND)                                  \
     do                                                            \
     {                                                             \
diff --git a/src/tests/test_utils/MultiviewTest.h b/src/tests/test_utils/MultiviewTest.h
index 3d087bb..ef83da6 100644
--- a/src/tests/test_utils/MultiviewTest.h
+++ b/src/tests/test_utils/MultiviewTest.h
@@ -139,10 +139,23 @@
 {
   protected:
     MultiviewTest() : MultiviewTestBase(GetParam()) {}
-    void SetUp() override { MultiviewTestBase::MultiviewTestBaseSetUp(); }
-    void TearDown() override { MultiviewTestBase::MultiviewTestBaseTearDown(); }
 
     void overrideWorkaroundsD3D(WorkaroundsD3D *workarounds) final;
+
+    virtual void testSetUp() {}
+    virtual void testTearDown() {}
+
+  private:
+    void SetUp() override
+    {
+        MultiviewTestBase::MultiviewTestBaseSetUp();
+        testSetUp();
+    }
+    void TearDown() override
+    {
+        testTearDown();
+        MultiviewTestBase::MultiviewTestBaseTearDown();
+    }
 };
 
 }  // namespace angle