diff --git a/modules/audio_processing/audio_processing_impl_locking_unittest.cc b/modules/audio_processing/audio_processing_impl_locking_unittest.cc
index bb45fcf..396231b 100644
--- a/modules/audio_processing/audio_processing_impl_locking_unittest.cc
+++ b/modules/audio_processing/audio_processing_impl_locking_unittest.cc
@@ -24,9 +24,11 @@
 #include "test/gtest.h"
 
 namespace webrtc {
-
 namespace {
 
+constexpr int kMaxFrameSize = 480;
+constexpr int kTestTimeOutLimit = 10 * 60 * 1000;
+
 class AudioProcessingImplLockTest;
 
 // Type of the render thread APM API call to use in the test.
@@ -305,14 +307,14 @@
                    rtc::Event* render_call_event,
                    rtc::Event* capture_call_event,
                    FrameCounters* shared_counters_state,
-                   TestConfig* test_config,
+                   const TestConfig* test_config,
                    AudioProcessing* apm);
   void Process();
 
  private:
-  static const int kMaxCallDifference = 10;
-  static const float kCaptureInputFloatLevel;
-  static const int kCaptureInputFixLevel = 1024;
+  static constexpr int kMaxCallDifference = 10;
+  static constexpr float kCaptureInputFloatLevel = 0.03125f;
+  static constexpr int kCaptureInputFixLevel = 1024;
 
   void PrepareFrame();
   void CallApmCaptureSide();
@@ -331,13 +333,13 @@
 class StatsProcessor {
  public:
   StatsProcessor(RandomGenerator* rand_gen,
-                 TestConfig* test_config,
+                 const TestConfig* test_config,
                  AudioProcessing* apm);
   void Process();
 
  private:
   RandomGenerator* rand_gen_ = nullptr;
-  TestConfig* test_config_ = nullptr;
+  const TestConfig* const test_config_ = nullptr;
   AudioProcessing* apm_ = nullptr;
 };
 
@@ -349,14 +351,14 @@
                   rtc::Event* render_call_event,
                   rtc::Event* capture_call_event,
                   FrameCounters* shared_counters_state,
-                  TestConfig* test_config,
+                  const TestConfig* test_config,
                   AudioProcessing* apm);
   void Process();
 
  private:
-  static const int kMaxCallDifference = 10;
-  static const int kRenderInputFixLevel = 16384;
-  static const float kRenderInputFloatLevel;
+  static constexpr int kMaxCallDifference = 10;
+  static constexpr int kRenderInputFixLevel = 16384;
+  static constexpr float kRenderInputFloatLevel = 0.5f;
 
   void PrepareFrame();
   void CallApmRenderSide();
@@ -380,10 +382,6 @@
   bool MaybeEndTest();
 
  private:
-  static const int kTestTimeOutLimit = 10 * 60 * 1000;
-  static const int kMaxFrameSize = 480;
-
-  // ::testing::TestWithParam<> implementation
   void SetUp() override;
   void TearDown() override;
 
@@ -428,8 +426,8 @@
   // Thread related variables.
   mutable RandomGenerator rand_gen_;
 
+  const TestConfig test_config_;
   rtc::scoped_refptr<AudioProcessing> apm_;
-  TestConfig test_config_;
   FrameCounters frame_counters_;
   RenderProcessor render_thread_state_;
   CaptureProcessor capture_thread_state_;
@@ -476,8 +474,24 @@
   }
 }
 
+AudioProcessing::Config GetApmTestConfig(AecType aec_type) {
+  AudioProcessing::Config apm_config;
+  apm_config.echo_canceller.enabled = aec_type != AecType::AecTurnedOff;
+  apm_config.echo_canceller.mobile_mode =
+      aec_type == AecType::BasicWebRtcAecSettingsWithAecMobile;
+  apm_config.gain_controller1.enabled = true;
+  apm_config.gain_controller1.mode =
+      AudioProcessing::Config::GainController1::kAdaptiveDigital;
+  apm_config.noise_suppression.enabled = true;
+  apm_config.voice_detection.enabled = true;
+  return apm_config;
+}
+
 AudioProcessingImplLockTest::AudioProcessingImplLockTest()
-    : apm_(AudioProcessingBuilderForTesting().Create()),
+    : test_config_(GetParam()),
+      apm_(AudioProcessingBuilderForTesting()
+               .SetConfig(GetApmTestConfig(test_config_.aec_type))
+               .Create()),
       render_thread_state_(kMaxFrameSize,
                            &rand_gen_,
                            &render_call_event_,
@@ -508,22 +522,7 @@
   return false;
 }
 
-// Setup of test and APM.
-void AudioProcessingImplLockTest::SetUp() {
-  test_config_ = static_cast<TestConfig>(GetParam());
-
-  AudioProcessing::Config apm_config = apm_->GetConfig();
-  apm_config.echo_canceller.enabled =
-      (test_config_.aec_type != AecType::AecTurnedOff);
-  apm_config.echo_canceller.mobile_mode =
-      (test_config_.aec_type == AecType::BasicWebRtcAecSettingsWithAecMobile);
-  apm_config.gain_controller1.enabled = true;
-  apm_config.gain_controller1.mode =
-      AudioProcessing::Config::GainController1::kAdaptiveDigital;
-  apm_config.noise_suppression.enabled = true;
-  apm_config.voice_detection.enabled = true;
-  apm_->ApplyConfig(apm_config);
-}
+void AudioProcessingImplLockTest::SetUp() {}
 
 void AudioProcessingImplLockTest::TearDown() {
   render_call_event_.Set();
@@ -531,7 +530,7 @@
 }
 
 StatsProcessor::StatsProcessor(RandomGenerator* rand_gen,
-                               TestConfig* test_config,
+                               const TestConfig* test_config,
                                AudioProcessing* apm)
     : rand_gen_(rand_gen), test_config_(test_config), apm_(apm) {}
 
@@ -556,14 +555,12 @@
   apm_->GetStatistics();
 }
 
-const float CaptureProcessor::kCaptureInputFloatLevel = 0.03125f;
-
 CaptureProcessor::CaptureProcessor(int max_frame_size,
                                    RandomGenerator* rand_gen,
                                    rtc::Event* render_call_event,
                                    rtc::Event* capture_call_event,
                                    FrameCounters* shared_counters_state,
-                                   TestConfig* test_config,
+                                   const TestConfig* test_config,
                                    AudioProcessing* apm)
     : rand_gen_(rand_gen),
       render_call_event_(render_call_event),
@@ -787,14 +784,12 @@
                frame_data_.input_number_of_channels);
 }
 
-const float RenderProcessor::kRenderInputFloatLevel = 0.5f;
-
 RenderProcessor::RenderProcessor(int max_frame_size,
                                  RandomGenerator* rand_gen,
                                  rtc::Event* render_call_event,
                                  rtc::Event* capture_call_event,
                                  FrameCounters* shared_counters_state,
-                                 TestConfig* test_config,
+                                 const TestConfig* test_config,
                                  AudioProcessing* apm)
     : rand_gen_(rand_gen),
       render_call_event_(render_call_event),
@@ -1003,7 +998,7 @@
                frame_data_.input_number_of_channels);
 }
 
-}  // anonymous namespace
+}  // namespace
 
 TEST_P(AudioProcessingImplLockTest, LockTest) {
   // Run test and verify that it did not time out.
