diff --git a/src/tests/DawnTest.h b/src/tests/DawnTest.h
index e986f67..f80197f 100644
--- a/src/tests/DawnTest.h
+++ b/src/tests/DawnTest.h
@@ -356,22 +356,12 @@
 
 template <typename Params = AdapterTestParam>
 class DawnTestWithParams : public DawnTestBase, public ::testing::TestWithParam<Params> {
-  private:
-    void SetUp() override final {
-        // DawnTestBase::SetUp() creates the device and wire.
-        // It was separate from TestSetUp() so we can skip tests completely if no adapter
-        // is available.
-        // TODO(enga): There is now always an available adapter otherwise we fail test environment
-        // SetUp. Consider removing the extra TestSetUp() overload.
-        DawnTestBase::SetUp();
-        TestSetUp();
-    }
-
   protected:
     DawnTestWithParams();
     ~DawnTestWithParams() override = default;
 
-    virtual void TestSetUp() {
+    void SetUp() override {
+        DawnTestBase::SetUp();
     }
 
     void TearDown() override {
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index d8bcbbc..769ccd8 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -26,8 +26,8 @@
 
 class ColorStateTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         vsModule = utils::CreateShaderModule(device, utils::SingleShaderStage::Vertex, R"(
                 #version 450
diff --git a/src/tests/end2end/D3D12ResourceWrappingTests.cpp b/src/tests/end2end/D3D12ResourceWrappingTests.cpp
index a07e5ab..9466f76 100644
--- a/src/tests/end2end/D3D12ResourceWrappingTests.cpp
+++ b/src/tests/end2end/D3D12ResourceWrappingTests.cpp
@@ -29,8 +29,8 @@
 
     class D3D12ResourceTestBase : public DawnTest {
       public:
-        void TestSetUp() override {
-            DawnTest::TestSetUp();
+        void SetUp() override {
+            DawnTest::SetUp();
             if (UsesWire()) {
                 return;
             }
diff --git a/src/tests/end2end/DeprecatedAPITests.cpp b/src/tests/end2end/DeprecatedAPITests.cpp
index 0c29933..76e9e82 100644
--- a/src/tests/end2end/DeprecatedAPITests.cpp
+++ b/src/tests/end2end/DeprecatedAPITests.cpp
@@ -25,7 +25,8 @@
 
 class DeprecationTests : public DawnTest {
   protected:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         // Skip when validation is off because warnings might be emitted during validation calls
         DAWN_SKIP_TEST_IF(IsDawnValidationSkipped());
     }
@@ -35,6 +36,7 @@
             EXPECT_EQ(mLastWarningCount,
                       dawn_native::GetDeprecationWarningCountForTesting(device.Get()));
         }
+        DawnTest::TearDown();
     }
 
     size_t mLastWarningCount = 0;
diff --git a/src/tests/end2end/DepthSamplingTests.cpp b/src/tests/end2end/DepthSamplingTests.cpp
index 0902975..a8d08df 100644
--- a/src/tests/end2end/DepthSamplingTests.cpp
+++ b/src/tests/end2end/DepthSamplingTests.cpp
@@ -41,8 +41,8 @@
 
 class DepthSamplingTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         wgpu::BufferDescriptor uniformBufferDesc;
         uniformBufferDesc.usage = wgpu::BufferUsage::Uniform | wgpu::BufferUsage::CopyDst;
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index f0c3023..80040ec 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -22,8 +22,8 @@
 
 class DepthStencilStateTest : public DawnTest {
     protected:
-        void TestSetUp() override {
-            DawnTest::TestSetUp();
+        void SetUp() override {
+            DawnTest::SetUp();
 
             wgpu::TextureDescriptor renderTargetDescriptor;
             renderTargetDescriptor.dimension = wgpu::TextureDimension::e2D;
diff --git a/src/tests/end2end/DestroyTests.cpp b/src/tests/end2end/DestroyTests.cpp
index c2c47ee..82c43a6 100644
--- a/src/tests/end2end/DestroyTests.cpp
+++ b/src/tests/end2end/DestroyTests.cpp
@@ -21,8 +21,8 @@
 
 class DestroyTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(IsDawnValidationSkipped());
 
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/DeviceLostTests.cpp b/src/tests/end2end/DeviceLostTests.cpp
index 6ee0367..5aa0263 100644
--- a/src/tests/end2end/DeviceLostTests.cpp
+++ b/src/tests/end2end/DeviceLostTests.cpp
@@ -56,16 +56,16 @@
 
 class DeviceLostTest : public DawnTest {
   protected:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(UsesWire());
-        DawnTest::TestSetUp();
         mockDeviceLostCallback = std::make_unique<MockDeviceLostCallback>();
         mockFenceOnCompletionCallback = std::make_unique<MockFenceOnCompletionCallback>();
     }
 
     void TearDown() override {
-        DawnTest::TearDown();
         mockDeviceLostCallback = nullptr;
+        DawnTest::TearDown();
     }
 
     void SetCallbackAndLoseForTesting() {
diff --git a/src/tests/end2end/DrawIndexedIndirectTests.cpp b/src/tests/end2end/DrawIndexedIndirectTests.cpp
index 1b721ca..a8e8c12 100644
--- a/src/tests/end2end/DrawIndexedIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndexedIndirectTests.cpp
@@ -21,8 +21,8 @@
 
 class DrawIndexedIndirectTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
diff --git a/src/tests/end2end/DrawIndexedTests.cpp b/src/tests/end2end/DrawIndexedTests.cpp
index e15ed52..48abdad 100644
--- a/src/tests/end2end/DrawIndexedTests.cpp
+++ b/src/tests/end2end/DrawIndexedTests.cpp
@@ -21,8 +21,8 @@
 
 class DrawIndexedTest : public DawnTest {
     protected:
-        void TestSetUp() override {
-            DawnTest::TestSetUp();
+        void SetUp() override {
+            DawnTest::SetUp();
 
             renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
diff --git a/src/tests/end2end/DrawIndirectTests.cpp b/src/tests/end2end/DrawIndirectTests.cpp
index c127b54..3f14375 100644
--- a/src/tests/end2end/DrawIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndirectTests.cpp
@@ -21,8 +21,8 @@
 
 class DrawIndirectTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
diff --git a/src/tests/end2end/DrawTests.cpp b/src/tests/end2end/DrawTests.cpp
index d028912..b4673bf 100644
--- a/src/tests/end2end/DrawTests.cpp
+++ b/src/tests/end2end/DrawTests.cpp
@@ -21,8 +21,8 @@
 
 class DrawTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index 1798242..d60f493 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -24,8 +24,8 @@
 
 class DynamicBufferOffsetTests : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         // Mix up dynamic and non dynamic resources in one bind group and using not continuous
         // binding number to cover more cases.
diff --git a/src/tests/end2end/FenceTests.cpp b/src/tests/end2end/FenceTests.cpp
index cba7dd3..20d3e6c 100644
--- a/src/tests/end2end/FenceTests.cpp
+++ b/src/tests/end2end/FenceTests.cpp
@@ -60,8 +60,8 @@
     FenceTests() : mCallIndex(0) {
     }
 
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
         mockFenceOnCompletionCallback = std::make_unique<MockFenceOnCompletionCallback>();
         mockPopErrorScopeCallback = std::make_unique<MockPopErrorScopeCallback>();
     }
diff --git a/src/tests/end2end/IndexFormatTests.cpp b/src/tests/end2end/IndexFormatTests.cpp
index 4437260..ea83e91 100644
--- a/src/tests/end2end/IndexFormatTests.cpp
+++ b/src/tests/end2end/IndexFormatTests.cpp
@@ -22,8 +22,8 @@
 
 class IndexFormatTest : public DawnTest {
     protected:
-        void TestSetUp() override {
-            DawnTest::TestSetUp();
+        void SetUp() override {
+            DawnTest::SetUp();
 
             renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
         }
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index 8cd177f..cc3b3c3 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -20,8 +20,8 @@
 
 class MultisampledRenderingTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         InitTexturesForTest();
     }
diff --git a/src/tests/end2end/NonzeroTextureCreationTests.cpp b/src/tests/end2end/NonzeroTextureCreationTests.cpp
index d9fa56c..7cdafd5 100644
--- a/src/tests/end2end/NonzeroTextureCreationTests.cpp
+++ b/src/tests/end2end/NonzeroTextureCreationTests.cpp
@@ -20,8 +20,8 @@
 
 class NonzeroTextureCreationTests : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
     }
 
     constexpr static uint32_t kSize = 128;
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index fa795bf..3e6a043 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -20,8 +20,8 @@
 
 class OpArrayLengthTest : public DawnTest {
   protected:
-    void TestSetUp() {
-        DawnTest::TestSetUp();
+    void SetUp() {
+        DawnTest::SetUp();
 
         // Create buffers of various size to check the length() implementation
         wgpu::BufferDescriptor bufferDesc;
diff --git a/src/tests/end2end/PrimitiveTopologyTests.cpp b/src/tests/end2end/PrimitiveTopologyTests.cpp
index 7710b12..822bfee 100644
--- a/src/tests/end2end/PrimitiveTopologyTests.cpp
+++ b/src/tests/end2end/PrimitiveTopologyTests.cpp
@@ -145,8 +145,8 @@
 
 class PrimitiveTopologyTest : public DawnTest {
     protected:
-        void TestSetUp() override {
-            DawnTest::TestSetUp();
+        void SetUp() override {
+            DawnTest::SetUp();
 
             renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
diff --git a/src/tests/end2end/RenderBundleTests.cpp b/src/tests/end2end/RenderBundleTests.cpp
index 5ee766e..0df87c3 100644
--- a/src/tests/end2end/RenderBundleTests.cpp
+++ b/src/tests/end2end/RenderBundleTests.cpp
@@ -26,8 +26,8 @@
 // tested in all other rendering tests.
 class RenderBundleTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
diff --git a/src/tests/end2end/RenderPassLoadOpTests.cpp b/src/tests/end2end/RenderPassLoadOpTests.cpp
index 943b86f..618f9c0 100644
--- a/src/tests/end2end/RenderPassLoadOpTests.cpp
+++ b/src/tests/end2end/RenderPassLoadOpTests.cpp
@@ -54,8 +54,8 @@
 
 class RenderPassLoadOpTests : public DawnTest {
     protected:
-        void TestSetUp() override {
-            DawnTest::TestSetUp();
+        void SetUp() override {
+            DawnTest::SetUp();
 
             wgpu::TextureDescriptor descriptor;
             descriptor.dimension = wgpu::TextureDimension::e2D;
diff --git a/src/tests/end2end/RenderPassTests.cpp b/src/tests/end2end/RenderPassTests.cpp
index a7fe522..c157a92 100644
--- a/src/tests/end2end/RenderPassTests.cpp
+++ b/src/tests/end2end/RenderPassTests.cpp
@@ -22,8 +22,8 @@
 
 class RenderPassTest : public DawnTest {
 protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         // Shaders to draw a bottom-left triangle in blue.
         mVSModule = utils::CreateShaderModule(device, utils::SingleShaderStage::Vertex, R"(
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index b476b34..1c38a4c 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -50,8 +50,8 @@
 
 class SamplerTest : public DawnTest {
 protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
         mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
         auto vsModule = utils::CreateShaderModule(device, utils::SingleShaderStage::Vertex, R"(
diff --git a/src/tests/end2end/SwapChainTests.cpp b/src/tests/end2end/SwapChainTests.cpp
index c16976e..bfa10a1 100644
--- a/src/tests/end2end/SwapChainTests.cpp
+++ b/src/tests/end2end/SwapChainTests.cpp
@@ -23,7 +23,8 @@
 
 class SwapChainTests : public DawnTest {
   public:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(UsesWire());
 
         glfwSetErrorCallback([](int code, const char* message) {
@@ -58,6 +59,7 @@
         if (window != nullptr) {
             glfwDestroyWindow(window);
         }
+        DawnTest::TearDown();
     }
 
     void ClearTexture(wgpu::TextureView view, wgpu::Color color) {
diff --git a/src/tests/end2end/SwapChainValidationTests.cpp b/src/tests/end2end/SwapChainValidationTests.cpp
index 7199a37..b4a76d4 100644
--- a/src/tests/end2end/SwapChainValidationTests.cpp
+++ b/src/tests/end2end/SwapChainValidationTests.cpp
@@ -24,7 +24,8 @@
 
 class SwapChainValidationTests : public DawnTest {
   public:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(UsesWire());
         DAWN_SKIP_TEST_IF(IsDawnValidationSkipped());
 
@@ -59,6 +60,7 @@
         if (window != nullptr) {
             glfwDestroyWindow(window);
         }
+        DawnTest::TearDown();
     }
 
   protected:
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 24304a3..cad0bc9 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -112,8 +112,8 @@
 
 class TextureFormatTest : public DawnTest {
   protected:
-    void TestSetUp() {
-        DawnTest::TestSetUp();
+    void SetUp() {
+        DawnTest::SetUp();
     }
 
     // Structure containing all the information that tests need to know about the format.
diff --git a/src/tests/end2end/TextureViewTests.cpp b/src/tests/end2end/TextureViewTests.cpp
index b133d7b..9f51d2e 100644
--- a/src/tests/end2end/TextureViewTests.cpp
+++ b/src/tests/end2end/TextureViewTests.cpp
@@ -78,8 +78,8 @@
         return static_cast<int>(level * 10) + static_cast<int>(layer + 1);
     }
 
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index b71f766..95e8119 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -32,9 +32,9 @@
 
 class TextureZeroInitTest : public DawnTest {
   protected:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(UsesWire());
-        DawnTest::TestSetUp();
     }
     wgpu::TextureDescriptor CreateTextureDescriptor(uint32_t mipLevelCount,
                                                     uint32_t arrayLayerCount,
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index 8802d0c..6030adc 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -46,8 +46,8 @@
 
 class VertexFormatTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
     }
diff --git a/src/tests/end2end/VertexStateTests.cpp b/src/tests/end2end/VertexStateTests.cpp
index 330cbd5..404cdf2 100644
--- a/src/tests/end2end/VertexStateTests.cpp
+++ b/src/tests/end2end/VertexStateTests.cpp
@@ -36,8 +36,8 @@
 
 class VertexStateTest : public DawnTest {
   protected:
-    void TestSetUp() override {
-        DawnTest::TestSetUp();
+    void SetUp() override {
+        DawnTest::SetUp();
 
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
     }
diff --git a/src/tests/perf_tests/BufferUploadPerf.cpp b/src/tests/perf_tests/BufferUploadPerf.cpp
index 11b68ab..5849bba 100644
--- a/src/tests/perf_tests/BufferUploadPerf.cpp
+++ b/src/tests/perf_tests/BufferUploadPerf.cpp
@@ -92,7 +92,7 @@
     }
     ~BufferUploadPerf() override = default;
 
-    void TestSetUp() override;
+    void SetUp() override;
 
   private:
     void Step() override;
@@ -101,8 +101,8 @@
     std::vector<uint8_t> data;
 };
 
-void BufferUploadPerf::TestSetUp() {
-    DawnPerfTestWithParams<BufferUploadParams>::TestSetUp();
+void BufferUploadPerf::SetUp() {
+    DawnPerfTestWithParams<BufferUploadParams>::SetUp();
 
     wgpu::BufferDescriptor desc = {};
     desc.size = data.size();
diff --git a/src/tests/perf_tests/DrawCallPerf.cpp b/src/tests/perf_tests/DrawCallPerf.cpp
index 9bfd8bf..72e837a 100644
--- a/src/tests/perf_tests/DrawCallPerf.cpp
+++ b/src/tests/perf_tests/DrawCallPerf.cpp
@@ -227,7 +227,7 @@
     }
     ~DrawCallPerf() override = default;
 
-    void TestSetUp() override;
+    void SetUp() override;
 
   protected:
     DrawCallParam GetParam() const {
@@ -267,8 +267,8 @@
     wgpu::RenderBundle mRenderBundle;
 };
 
-void DrawCallPerf::TestSetUp() {
-    DawnPerfTestWithParams::TestSetUp();
+void DrawCallPerf::SetUp() {
+    DawnPerfTestWithParams::SetUp();
 
     // Compute aligned uniform / vertex data sizes.
     mAlignedUniformSize = Align(kUniformSize, kMinDynamicBufferOffsetAlignment);
diff --git a/src/tests/white_box/D3D12DescriptorHeapTests.cpp b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
index bdb18c1..cbe7dcb 100644
--- a/src/tests/white_box/D3D12DescriptorHeapTests.cpp
+++ b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
@@ -33,7 +33,8 @@
 
 class D3D12DescriptorHeapTests : public DawnTest {
   protected:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(UsesWire());
         mD3DDevice = reinterpret_cast<Device*>(device.Get());
 
diff --git a/src/tests/white_box/D3D12ResidencyTests.cpp b/src/tests/white_box/D3D12ResidencyTests.cpp
index b8ac1ba..0a272d1 100644
--- a/src/tests/white_box/D3D12ResidencyTests.cpp
+++ b/src/tests/white_box/D3D12ResidencyTests.cpp
@@ -34,7 +34,8 @@
 
 class D3D12ResidencyTests : public DawnTest {
   protected:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(UsesWire());
 
         // Restrict Dawn's budget to create an artificial budget.
diff --git a/src/tests/white_box/MetalAutoreleasePoolTests.mm b/src/tests/white_box/MetalAutoreleasePoolTests.mm
index 377c08d..6c0a850 100644
--- a/src/tests/white_box/MetalAutoreleasePoolTests.mm
+++ b/src/tests/white_box/MetalAutoreleasePoolTests.mm
@@ -20,7 +20,8 @@
 
 class MetalAutoreleasePoolTests : public DawnTest {
   private:
-    void TestSetUp() override {
+    void SetUp() override {
+        DawnTest::SetUp();
         DAWN_SKIP_TEST_IF(UsesWire());
 
         mMtlDevice = reinterpret_cast<Device*>(device.Get());
diff --git a/src/tests/white_box/VulkanErrorInjectorTests.cpp b/src/tests/white_box/VulkanErrorInjectorTests.cpp
index 23872ec..0a5bde6 100644
--- a/src/tests/white_box/VulkanErrorInjectorTests.cpp
+++ b/src/tests/white_box/VulkanErrorInjectorTests.cpp
@@ -25,7 +25,8 @@
 
     class VulkanErrorInjectorTests : public DawnTest {
       public:
-        void TestSetUp() override {
+        void SetUp() override {
+            DawnTest::SetUp();
             DAWN_SKIP_TEST_IF(UsesWire());
 
             mDeviceVk = reinterpret_cast<dawn_native::vulkan::Device*>(device.Get());
diff --git a/src/tests/white_box/VulkanImageWrappingTestsDmaBuf.cpp b/src/tests/white_box/VulkanImageWrappingTestsDmaBuf.cpp
index 4ba327e..0e3324c 100644
--- a/src/tests/white_box/VulkanImageWrappingTestsDmaBuf.cpp
+++ b/src/tests/white_box/VulkanImageWrappingTestsDmaBuf.cpp
@@ -34,7 +34,7 @@
 
         class VulkanImageWrappingTestBase : public DawnTest {
           public:
-            void TestSetUp() override {
+            void SetUp() override {
                 DAWN_SKIP_TEST_IF(UsesWire());
 
                 gbmDevice = CreateGbmDevice();
@@ -264,8 +264,8 @@
     // These tests are skipped if the harness is using the wire.
     class VulkanImageWrappingUsageTests : public VulkanImageWrappingTestBase {
       public:
-        void TestSetUp() override {
-            VulkanImageWrappingTestBase::TestSetUp();
+        void SetUp() override {
+            VulkanImageWrappingTestBase::SetUp();
             if (UsesWire()) {
                 return;
             }
diff --git a/src/tests/white_box/VulkanImageWrappingTestsOpaqueFD.cpp b/src/tests/white_box/VulkanImageWrappingTestsOpaqueFD.cpp
index b897e62..e60e1ff 100644
--- a/src/tests/white_box/VulkanImageWrappingTestsOpaqueFD.cpp
+++ b/src/tests/white_box/VulkanImageWrappingTestsOpaqueFD.cpp
@@ -31,7 +31,8 @@
 
         class VulkanImageWrappingTestBase : public DawnTest {
           public:
-            void TestSetUp() override {
+            void SetUp() override {
+                DawnTest::SetUp();
                 if (UsesWire()) {
                     return;
                 }
@@ -200,8 +201,8 @@
 
     class VulkanImageWrappingValidationTests : public VulkanImageWrappingTestBase {
       public:
-        void TestSetUp() override {
-            VulkanImageWrappingTestBase::TestSetUp();
+        void SetUp() override {
+            VulkanImageWrappingTestBase::SetUp();
             if (UsesWire()) {
                 return;
             }
@@ -352,8 +353,8 @@
     // These tests are skipped if the harness is using the wire.
     class VulkanImageWrappingUsageTests : public VulkanImageWrappingTestBase {
       public:
-        void TestSetUp() override {
-            VulkanImageWrappingTestBase::TestSetUp();
+        void SetUp() override {
+            VulkanImageWrappingTestBase::SetUp();
             if (UsesWire()) {
                 return;
             }
