diff --git a/common_audio/mocks/mock_smoothing_filter.h b/common_audio/mocks/mock_smoothing_filter.h
index 712049f..9df49dd 100644
--- a/common_audio/mocks/mock_smoothing_filter.h
+++ b/common_audio/mocks/mock_smoothing_filter.h
@@ -18,9 +18,9 @@
 
 class MockSmoothingFilter : public SmoothingFilter {
  public:
-  MOCK_METHOD1(AddSample, void(float));
-  MOCK_METHOD0(GetAverage, absl::optional<float>());
-  MOCK_METHOD1(SetTimeConstantMs, bool(int));
+  MOCK_METHOD(void, AddSample, (float), (override));
+  MOCK_METHOD(absl::optional<float>, GetAverage, (), (override));
+  MOCK_METHOD(bool, SetTimeConstantMs, (int), (override));
 };
 
 }  // namespace webrtc
diff --git a/common_audio/resampler/sinc_resampler_unittest.cc b/common_audio/resampler/sinc_resampler_unittest.cc
index 7bcd7f1..b067b23 100644
--- a/common_audio/resampler/sinc_resampler_unittest.cc
+++ b/common_audio/resampler/sinc_resampler_unittest.cc
@@ -40,7 +40,7 @@
 // Helper class to ensure ChunkedResample() functions properly.
 class MockSource : public SincResamplerCallback {
  public:
-  MOCK_METHOD2(Run, void(size_t frames, float* destination));
+  MOCK_METHOD(void, Run, (size_t frames, float* destination), (override));
 };
 
 ACTION(ClearBuffer) {
diff --git a/common_audio/vad/mock/mock_vad.h b/common_audio/vad/mock/mock_vad.h
index afe80ef..5a554ce 100644
--- a/common_audio/vad/mock/mock_vad.h
+++ b/common_audio/vad/mock/mock_vad.h
@@ -18,14 +18,14 @@
 
 class MockVad : public Vad {
  public:
-  virtual ~MockVad() { Die(); }
-  MOCK_METHOD0(Die, void());
+  ~MockVad() override { Die(); }
+  MOCK_METHOD(void, Die, ());
 
-  MOCK_METHOD3(VoiceActivity,
-               enum Activity(const int16_t* audio,
-                             size_t num_samples,
-                             int sample_rate_hz));
-  MOCK_METHOD0(Reset, void());
+  MOCK_METHOD(enum Activity,
+              VoiceActivity,
+              (const int16_t* audio, size_t num_samples, int sample_rate_hz),
+              (override));
+  MOCK_METHOD(void, Reset, (), (override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/mock/mock_audio_network_adaptor.h b/modules/audio_coding/audio_network_adaptor/mock/mock_audio_network_adaptor.h
index 8c04849..26a9061 100644
--- a/modules/audio_coding/audio_network_adaptor/mock/mock_audio_network_adaptor.h
+++ b/modules/audio_coding/audio_network_adaptor/mock/mock_audio_network_adaptor.h
@@ -18,27 +18,38 @@
 
 class MockAudioNetworkAdaptor : public AudioNetworkAdaptor {
  public:
-  virtual ~MockAudioNetworkAdaptor() { Die(); }
-  MOCK_METHOD0(Die, void());
+  ~MockAudioNetworkAdaptor() override { Die(); }
+  MOCK_METHOD(void, Die, ());
 
-  MOCK_METHOD1(SetUplinkBandwidth, void(int uplink_bandwidth_bps));
+  MOCK_METHOD(void, SetUplinkBandwidth, (int uplink_bandwidth_bps), (override));
 
-  MOCK_METHOD1(SetUplinkPacketLossFraction,
-               void(float uplink_packet_loss_fraction));
+  MOCK_METHOD(void,
+              SetUplinkPacketLossFraction,
+              (float uplink_packet_loss_fraction),
+              (override));
 
-  MOCK_METHOD1(SetRtt, void(int rtt_ms));
+  MOCK_METHOD(void, SetRtt, (int rtt_ms), (override));
 
-  MOCK_METHOD1(SetTargetAudioBitrate, void(int target_audio_bitrate_bps));
+  MOCK_METHOD(void,
+              SetTargetAudioBitrate,
+              (int target_audio_bitrate_bps),
+              (override));
 
-  MOCK_METHOD1(SetOverhead, void(size_t overhead_bytes_per_packet));
+  MOCK_METHOD(void,
+              SetOverhead,
+              (size_t overhead_bytes_per_packet),
+              (override));
 
-  MOCK_METHOD0(GetEncoderRuntimeConfig, AudioEncoderRuntimeConfig());
+  MOCK_METHOD(AudioEncoderRuntimeConfig,
+              GetEncoderRuntimeConfig,
+              (),
+              (override));
 
-  MOCK_METHOD1(StartDebugDump, void(FILE* file_handle));
+  MOCK_METHOD(void, StartDebugDump, (FILE * file_handle), (override));
 
-  MOCK_METHOD0(StopDebugDump, void());
+  MOCK_METHOD(void, StopDebugDump, (), (override));
 
-  MOCK_CONST_METHOD0(GetStats, ANAStats());
+  MOCK_METHOD(ANAStats, GetStats, (), (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/mock/mock_controller.h b/modules/audio_coding/audio_network_adaptor/mock/mock_controller.h
index df28e9e..de554c0 100644
--- a/modules/audio_coding/audio_network_adaptor/mock/mock_controller.h
+++ b/modules/audio_coding/audio_network_adaptor/mock/mock_controller.h
@@ -18,11 +18,16 @@
 
 class MockController : public Controller {
  public:
-  virtual ~MockController() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_METHOD1(UpdateNetworkMetrics,
-               void(const NetworkMetrics& network_metrics));
-  MOCK_METHOD1(MakeDecision, void(AudioEncoderRuntimeConfig* config));
+  ~MockController() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(void,
+              UpdateNetworkMetrics,
+              (const NetworkMetrics& network_metrics),
+              (override));
+  MOCK_METHOD(void,
+              MakeDecision,
+              (AudioEncoderRuntimeConfig * config),
+              (override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/mock/mock_controller_manager.h b/modules/audio_coding/audio_network_adaptor/mock/mock_controller_manager.h
index 8d410a7..9e2fa46 100644
--- a/modules/audio_coding/audio_network_adaptor/mock/mock_controller_manager.h
+++ b/modules/audio_coding/audio_network_adaptor/mock/mock_controller_manager.h
@@ -20,12 +20,13 @@
 
 class MockControllerManager : public ControllerManager {
  public:
-  virtual ~MockControllerManager() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_METHOD1(
-      GetSortedControllers,
-      std::vector<Controller*>(const Controller::NetworkMetrics& metrics));
-  MOCK_CONST_METHOD0(GetControllers, std::vector<Controller*>());
+  ~MockControllerManager() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(std::vector<Controller*>,
+              GetSortedControllers,
+              (const Controller::NetworkMetrics& metrics),
+              (override));
+  MOCK_METHOD(std::vector<Controller*>, GetControllers, (), (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump_writer.h b/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump_writer.h
index 06650ab..0c6a9ef 100644
--- a/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump_writer.h
+++ b/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump_writer.h
@@ -18,20 +18,24 @@
 
 class MockDebugDumpWriter : public DebugDumpWriter {
  public:
-  virtual ~MockDebugDumpWriter() { Die(); }
-  MOCK_METHOD0(Die, void());
+  ~MockDebugDumpWriter() override { Die(); }
+  MOCK_METHOD(void, Die, ());
 
-  MOCK_METHOD2(DumpEncoderRuntimeConfig,
-               void(const AudioEncoderRuntimeConfig& config,
-                    int64_t timestamp));
-  MOCK_METHOD2(DumpNetworkMetrics,
-               void(const Controller::NetworkMetrics& metrics,
-                    int64_t timestamp));
+  MOCK_METHOD(void,
+              DumpEncoderRuntimeConfig,
+              (const AudioEncoderRuntimeConfig& config, int64_t timestamp),
+              (override));
+  MOCK_METHOD(void,
+              DumpNetworkMetrics,
+              (const Controller::NetworkMetrics& metrics, int64_t timestamp),
+              (override));
 #if WEBRTC_ENABLE_PROTOBUF
-  MOCK_METHOD2(DumpControllerManagerConfig,
-               void(const audio_network_adaptor::config::ControllerManager&
-                        controller_manager_config,
-                    int64_t timestamp));
+  MOCK_METHOD(void,
+              DumpControllerManagerConfig,
+              (const audio_network_adaptor::config::ControllerManager&
+                   controller_manager_config,
+               int64_t timestamp),
+              (override));
 #endif
 };
 
diff --git a/modules/audio_coding/neteq/mock/mock_decoder_database.h b/modules/audio_coding/neteq/mock/mock_decoder_database.h
index d83dc7f..b8dc031 100644
--- a/modules/audio_coding/neteq/mock/mock_decoder_database.h
+++ b/modules/audio_coding/neteq/mock/mock_decoder_database.h
@@ -23,22 +23,28 @@
   explicit MockDecoderDatabase(
       rtc::scoped_refptr<AudioDecoderFactory> factory = nullptr)
       : DecoderDatabase(factory, absl::nullopt) {}
-  virtual ~MockDecoderDatabase() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_CONST_METHOD0(Empty, bool());
-  MOCK_CONST_METHOD0(Size, int());
-  MOCK_METHOD0(Reset, void());
-  MOCK_METHOD2(RegisterPayload,
-               int(int rtp_payload_type, const SdpAudioFormat& audio_format));
-  MOCK_METHOD1(Remove, int(uint8_t rtp_payload_type));
-  MOCK_METHOD0(RemoveAll, void());
-  MOCK_CONST_METHOD1(GetDecoderInfo,
-                     const DecoderInfo*(uint8_t rtp_payload_type));
-  MOCK_METHOD2(SetActiveDecoder,
-               int(uint8_t rtp_payload_type, bool* new_decoder));
-  MOCK_CONST_METHOD0(GetActiveDecoder, AudioDecoder*());
-  MOCK_METHOD1(SetActiveCngDecoder, int(uint8_t rtp_payload_type));
-  MOCK_CONST_METHOD0(GetActiveCngDecoder, ComfortNoiseDecoder*());
+  ~MockDecoderDatabase() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(bool, Empty, (), (const, override));
+  MOCK_METHOD(int, Size, (), (const, override));
+  MOCK_METHOD(void, Reset, (), (override));
+  MOCK_METHOD(int,
+              RegisterPayload,
+              (int rtp_payload_type, const SdpAudioFormat& audio_format),
+              (override));
+  MOCK_METHOD(int, Remove, (uint8_t rtp_payload_type), (override));
+  MOCK_METHOD(void, RemoveAll, (), (override));
+  MOCK_METHOD(const DecoderInfo*,
+              GetDecoderInfo,
+              (uint8_t rtp_payload_type),
+              (const, override));
+  MOCK_METHOD(int,
+              SetActiveDecoder,
+              (uint8_t rtp_payload_type, bool* new_decoder),
+              (override));
+  MOCK_METHOD(AudioDecoder*, GetActiveDecoder, (), (const, override));
+  MOCK_METHOD(int, SetActiveCngDecoder, (uint8_t rtp_payload_type), (override));
+  MOCK_METHOD(ComfortNoiseDecoder*, GetActiveCngDecoder, (), (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_dtmf_buffer.h b/modules/audio_coding/neteq/mock/mock_dtmf_buffer.h
index d9fe5d4..c60c56d 100644
--- a/modules/audio_coding/neteq/mock/mock_dtmf_buffer.h
+++ b/modules/audio_coding/neteq/mock/mock_dtmf_buffer.h
@@ -19,13 +19,16 @@
 class MockDtmfBuffer : public DtmfBuffer {
  public:
   MockDtmfBuffer(int fs) : DtmfBuffer(fs) {}
-  virtual ~MockDtmfBuffer() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_METHOD0(Flush, void());
-  MOCK_METHOD1(InsertEvent, int(const DtmfEvent& event));
-  MOCK_METHOD2(GetEvent, bool(uint32_t current_timestamp, DtmfEvent* event));
-  MOCK_CONST_METHOD0(Length, size_t());
-  MOCK_CONST_METHOD0(Empty, bool());
+  ~MockDtmfBuffer() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(void, Flush, (), (override));
+  MOCK_METHOD(int, InsertEvent, (const DtmfEvent& event), (override));
+  MOCK_METHOD(bool,
+              GetEvent,
+              (uint32_t current_timestamp, DtmfEvent* event),
+              (override));
+  MOCK_METHOD(size_t, Length, (), (const, override));
+  MOCK_METHOD(bool, Empty, (), (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_dtmf_tone_generator.h b/modules/audio_coding/neteq/mock/mock_dtmf_tone_generator.h
index eea8bee..60de167 100644
--- a/modules/audio_coding/neteq/mock/mock_dtmf_tone_generator.h
+++ b/modules/audio_coding/neteq/mock/mock_dtmf_tone_generator.h
@@ -18,12 +18,15 @@
 
 class MockDtmfToneGenerator : public DtmfToneGenerator {
  public:
-  virtual ~MockDtmfToneGenerator() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_METHOD3(Init, int(int fs, int event, int attenuation));
-  MOCK_METHOD0(Reset, void());
-  MOCK_METHOD2(Generate, int(size_t num_samples, AudioMultiVector* output));
-  MOCK_CONST_METHOD0(initialized, bool());
+  ~MockDtmfToneGenerator() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(int, Init, (int fs, int event, int attenuation), (override));
+  MOCK_METHOD(void, Reset, (), (override));
+  MOCK_METHOD(int,
+              Generate,
+              (size_t num_samples, AudioMultiVector* output),
+              (override));
+  MOCK_METHOD(bool, initialized, (), (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_expand.h b/modules/audio_coding/neteq/mock/mock_expand.h
index 286325b..9d66779 100644
--- a/modules/audio_coding/neteq/mock/mock_expand.h
+++ b/modules/audio_coding/neteq/mock/mock_expand.h
@@ -30,13 +30,13 @@
                statistics,
                fs,
                num_channels) {}
-  virtual ~MockExpand() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_METHOD0(Reset, void());
-  MOCK_METHOD1(Process, int(AudioMultiVector* output));
-  MOCK_METHOD0(SetParametersForNormalAfterExpand, void());
-  MOCK_METHOD0(SetParametersForMergeAfterExpand, void());
-  MOCK_CONST_METHOD0(overlap_length, size_t());
+  ~MockExpand() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(void, Reset, (), (override));
+  MOCK_METHOD(int, Process, (AudioMultiVector * output), (override));
+  MOCK_METHOD(void, SetParametersForNormalAfterExpand, (), (override));
+  MOCK_METHOD(void, SetParametersForMergeAfterExpand, (), (override));
+  MOCK_METHOD(size_t, overlap_length, (), (const, override));
 };
 
 }  // namespace webrtc
@@ -45,13 +45,15 @@
 
 class MockExpandFactory : public ExpandFactory {
  public:
-  MOCK_CONST_METHOD6(Create,
-                     Expand*(BackgroundNoise* background_noise,
-                             SyncBuffer* sync_buffer,
-                             RandomVector* random_vector,
-                             StatisticsCalculator* statistics,
-                             int fs,
-                             size_t num_channels));
+  MOCK_METHOD(Expand*,
+              Create,
+              (BackgroundNoise * background_noise,
+               SyncBuffer* sync_buffer,
+               RandomVector* random_vector,
+               StatisticsCalculator* statistics,
+               int fs,
+               size_t num_channels),
+              (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_histogram.h b/modules/audio_coding/neteq/mock/mock_histogram.h
index 91ae18f..03abbc1 100644
--- a/modules/audio_coding/neteq/mock/mock_histogram.h
+++ b/modules/audio_coding/neteq/mock/mock_histogram.h
@@ -22,8 +22,8 @@
       : Histogram(num_buckets, forget_factor) {}
   virtual ~MockHistogram() {}
 
-  MOCK_METHOD1(Add, void(int));
-  MOCK_METHOD1(Quantile, int(int));
+  MOCK_METHOD(void, Add, (int), (override));
+  MOCK_METHOD(int, Quantile, (int), (override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_neteq_controller.h b/modules/audio_coding/neteq/mock/mock_neteq_controller.h
index d1008c8..b7df85f 100644
--- a/modules/audio_coding/neteq/mock/mock_neteq_controller.h
+++ b/modules/audio_coding/neteq/mock/mock_neteq_controller.h
@@ -19,46 +19,45 @@
 class MockNetEqController : public NetEqController {
  public:
   MockNetEqController() = default;
-  virtual ~MockNetEqController() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_METHOD0(Reset, void());
-  MOCK_METHOD0(SoftReset, void());
-  MOCK_METHOD2(GetDecision,
-               NetEq::Operation(const NetEqStatus& neteq_status,
-                                bool* reset_decoder));
-  MOCK_METHOD6(Update,
-               void(uint16_t sequence_number,
-                    uint32_t timestamp,
-                    uint32_t last_played_out_timestamp,
-                    bool new_codec,
-                    bool cng_or_dtmf,
-                    size_t packet_length_samples));
-  MOCK_METHOD0(RegisterEmptyPacket, void());
-  MOCK_METHOD2(SetSampleRate, void(int fs_hz, size_t output_size_samples));
-  MOCK_METHOD1(SetMaximumDelay, bool(int delay_ms));
-  MOCK_METHOD1(SetMinimumDelay, bool(int delay_ms));
-  MOCK_METHOD1(SetBaseMinimumDelay, bool(int delay_ms));
-  MOCK_CONST_METHOD0(GetBaseMinimumDelay, int());
-  MOCK_CONST_METHOD0(CngRfc3389On, bool());
-  MOCK_CONST_METHOD0(CngOff, bool());
-  MOCK_METHOD0(SetCngOff, void());
-  MOCK_METHOD1(ExpandDecision, void(NetEq::Operation operation));
-  MOCK_METHOD1(AddSampleMemory, void(int32_t value));
-  MOCK_METHOD0(TargetLevelMs, int());
-  MOCK_METHOD6(PacketArrived,
-               absl::optional<int>(bool last_cng_or_dtmf,
-                                   size_t packet_length_samples,
-                                   bool should_update_stats,
-                                   uint16_t main_sequence_number,
-                                   uint32_t main_timestamp,
-                                   int fs_hz));
-  MOCK_CONST_METHOD0(PeakFound, bool());
-  MOCK_CONST_METHOD0(GetFilteredBufferLevel, int());
-  MOCK_METHOD1(set_sample_memory, void(int32_t value));
-  MOCK_CONST_METHOD0(noise_fast_forward, size_t());
-  MOCK_CONST_METHOD0(packet_length_samples, size_t());
-  MOCK_METHOD1(set_packet_length_samples, void(size_t value));
-  MOCK_METHOD1(set_prev_time_scale, void(bool value));
+  ~MockNetEqController() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(void, Reset, (), (override));
+  MOCK_METHOD(void, SoftReset, (), (override));
+  MOCK_METHOD(NetEq::Operation,
+              GetDecision,
+              (const NetEqStatus& neteq_status, bool* reset_decoder),
+              (override));
+  MOCK_METHOD(void, RegisterEmptyPacket, (), (override));
+  MOCK_METHOD(void,
+              SetSampleRate,
+              (int fs_hz, size_t output_size_samples),
+              (override));
+  MOCK_METHOD(bool, SetMaximumDelay, (int delay_ms), (override));
+  MOCK_METHOD(bool, SetMinimumDelay, (int delay_ms), (override));
+  MOCK_METHOD(bool, SetBaseMinimumDelay, (int delay_ms), (override));
+  MOCK_METHOD(int, GetBaseMinimumDelay, (), (const, override));
+  MOCK_METHOD(bool, CngRfc3389On, (), (const, override));
+  MOCK_METHOD(bool, CngOff, (), (const, override));
+  MOCK_METHOD(void, SetCngOff, (), (override));
+  MOCK_METHOD(void, ExpandDecision, (NetEq::Operation operation), (override));
+  MOCK_METHOD(void, AddSampleMemory, (int32_t value), (override));
+  MOCK_METHOD(int, TargetLevelMs, (), (override));
+  MOCK_METHOD(absl::optional<int>,
+              PacketArrived,
+              (bool last_cng_or_dtmf,
+               size_t packet_length_samples,
+               bool should_update_stats,
+               uint16_t main_sequence_number,
+               uint32_t main_timestamp,
+               int fs_hz),
+              (override));
+  MOCK_METHOD(bool, PeakFound, (), (const, override));
+  MOCK_METHOD(int, GetFilteredBufferLevel, (), (const, override));
+  MOCK_METHOD(void, set_sample_memory, (int32_t value), (override));
+  MOCK_METHOD(size_t, noise_fast_forward, (), (const, override));
+  MOCK_METHOD(size_t, packet_length_samples, (), (const, override));
+  MOCK_METHOD(void, set_packet_length_samples, (size_t value), (override));
+  MOCK_METHOD(void, set_prev_time_scale, (bool value), (override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_packet_buffer.h b/modules/audio_coding/neteq/mock/mock_packet_buffer.h
index 7efeb15..e466ea6 100644
--- a/modules/audio_coding/neteq/mock/mock_packet_buffer.h
+++ b/modules/audio_coding/neteq/mock/mock_packet_buffer.h
@@ -20,39 +20,47 @@
  public:
   MockPacketBuffer(size_t max_number_of_packets, const TickTimer* tick_timer)
       : PacketBuffer(max_number_of_packets, tick_timer) {}
-  virtual ~MockPacketBuffer() { Die(); }
-  MOCK_METHOD0(Die, void());
-  MOCK_METHOD0(Flush, void());
-  MOCK_CONST_METHOD0(Empty, bool());
-  int InsertPacket(Packet&& packet, StatisticsCalculator* stats) {
-    return InsertPacketWrapped(&packet, stats);
-  }
-  // Since gtest does not properly support move-only types, InsertPacket is
-  // implemented as a wrapper. You'll have to implement InsertPacketWrapped
-  // instead and move from |*packet|.
-  MOCK_METHOD2(InsertPacketWrapped,
-               int(Packet* packet, StatisticsCalculator* stats));
-  MOCK_METHOD5(InsertPacketList,
-               int(PacketList* packet_list,
-                   const DecoderDatabase& decoder_database,
-                   absl::optional<uint8_t>* current_rtp_payload_type,
-                   absl::optional<uint8_t>* current_cng_rtp_payload_type,
-                   StatisticsCalculator* stats));
-  MOCK_CONST_METHOD1(NextTimestamp, int(uint32_t* next_timestamp));
-  MOCK_CONST_METHOD2(NextHigherTimestamp,
-                     int(uint32_t timestamp, uint32_t* next_timestamp));
-  MOCK_CONST_METHOD0(PeekNextPacket, const Packet*());
-  MOCK_METHOD0(GetNextPacket, absl::optional<Packet>());
-  MOCK_METHOD1(DiscardNextPacket, int(StatisticsCalculator* stats));
-  MOCK_METHOD3(DiscardOldPackets,
-               void(uint32_t timestamp_limit,
-                    uint32_t horizon_samples,
-                    StatisticsCalculator* stats));
-  MOCK_METHOD2(DiscardAllOldPackets,
-               void(uint32_t timestamp_limit, StatisticsCalculator* stats));
-  MOCK_CONST_METHOD0(NumPacketsInBuffer, size_t());
-  MOCK_METHOD1(IncrementWaitingTimes, void(int));
-  MOCK_CONST_METHOD0(current_memory_bytes, int());
+  ~MockPacketBuffer() override { Die(); }
+  MOCK_METHOD(void, Die, ());
+  MOCK_METHOD(void, Flush, (), (override));
+  MOCK_METHOD(bool, Empty, (), (const, override));
+  MOCK_METHOD(int,
+              InsertPacket,
+              (Packet && packet, StatisticsCalculator* stats),
+              (override));
+  MOCK_METHOD(int,
+              InsertPacketList,
+              (PacketList * packet_list,
+               const DecoderDatabase& decoder_database,
+               absl::optional<uint8_t>* current_rtp_payload_type,
+               absl::optional<uint8_t>* current_cng_rtp_payload_type,
+               StatisticsCalculator* stats),
+              (override));
+  MOCK_METHOD(int,
+              NextTimestamp,
+              (uint32_t * next_timestamp),
+              (const, override));
+  MOCK_METHOD(int,
+              NextHigherTimestamp,
+              (uint32_t timestamp, uint32_t* next_timestamp),
+              (const, override));
+  MOCK_METHOD(const Packet*, PeekNextPacket, (), (const, override));
+  MOCK_METHOD(absl::optional<Packet>, GetNextPacket, (), (override));
+  MOCK_METHOD(int,
+              DiscardNextPacket,
+              (StatisticsCalculator * stats),
+              (override));
+  MOCK_METHOD(void,
+              DiscardOldPackets,
+              (uint32_t timestamp_limit,
+               uint32_t horizon_samples,
+               StatisticsCalculator* stats),
+              (override));
+  MOCK_METHOD(void,
+              DiscardAllOldPackets,
+              (uint32_t timestamp_limit, StatisticsCalculator* stats),
+              (override));
+  MOCK_METHOD(size_t, NumPacketsInBuffer, (), (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_red_payload_splitter.h b/modules/audio_coding/neteq/mock/mock_red_payload_splitter.h
index 68fd356..9daf571 100644
--- a/modules/audio_coding/neteq/mock/mock_red_payload_splitter.h
+++ b/modules/audio_coding/neteq/mock/mock_red_payload_splitter.h
@@ -18,10 +18,12 @@
 
 class MockRedPayloadSplitter : public RedPayloadSplitter {
  public:
-  MOCK_METHOD1(SplitRed, bool(PacketList* packet_list));
-  MOCK_METHOD2(CheckRedPayloads,
-               void(PacketList* packet_list,
-                    const DecoderDatabase& decoder_database));
+  MOCK_METHOD(bool, SplitRed, (PacketList * packet_list), (override));
+  MOCK_METHOD(void,
+              CheckRedPayloads,
+              (PacketList * packet_list,
+               const DecoderDatabase& decoder_database),
+              (override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/mock/mock_statistics_calculator.h b/modules/audio_coding/neteq/mock/mock_statistics_calculator.h
index 086c7c5..f881247 100644
--- a/modules/audio_coding/neteq/mock/mock_statistics_calculator.h
+++ b/modules/audio_coding/neteq/mock/mock_statistics_calculator.h
@@ -18,9 +18,12 @@
 
 class MockStatisticsCalculator : public StatisticsCalculator {
  public:
-  MOCK_METHOD1(PacketsDiscarded, void(size_t num_packets));
-  MOCK_METHOD1(SecondaryPacketsDiscarded, void(size_t num_packets));
-  MOCK_METHOD1(RelativePacketArrivalDelay, void(size_t delay_ms));
+  MOCK_METHOD(void, PacketsDiscarded, (size_t num_packets), (override));
+  MOCK_METHOD(void,
+              SecondaryPacketsDiscarded,
+              (size_t num_packets),
+              (override));
+  MOCK_METHOD(void, RelativePacketArrivalDelay, (size_t delay_ms), (override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/neteq_network_stats_unittest.cc b/modules/audio_coding/neteq/neteq_network_stats_unittest.cc
index d35c44c..df34622 100644
--- a/modules/audio_coding/neteq/neteq_network_stats_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_network_stats_unittest.cc
@@ -52,10 +52,10 @@
       : sample_rate_hz_(sample_rate_hz),
         num_channels_(num_channels),
         fec_enabled_(false) {}
-  ~MockAudioDecoder() /* override */ { Die(); }
-  MOCK_METHOD0(Die, void());
+  ~MockAudioDecoder() override { Die(); }
+  MOCK_METHOD(void, Die, ());
 
-  MOCK_METHOD0(Reset, void());
+  MOCK_METHOD(void, Reset, (), (override));
 
   class MockFrame : public AudioDecoder::EncodedAudioFrame {
    public:
diff --git a/modules/audio_coding/neteq/packet_buffer_unittest.cc b/modules/audio_coding/neteq/packet_buffer_unittest.cc
index 0aff955..40e7d53 100644
--- a/modules/audio_coding/neteq/packet_buffer_unittest.cc
+++ b/modules/audio_coding/neteq/packet_buffer_unittest.cc
@@ -31,13 +31,14 @@
 namespace {
 class MockEncodedAudioFrame : public webrtc::AudioDecoder::EncodedAudioFrame {
  public:
-  MOCK_CONST_METHOD0(Duration, size_t());
+  MOCK_METHOD(size_t, Duration, (), (const, override));
 
-  MOCK_CONST_METHOD0(IsDtxPacket, bool());
+  MOCK_METHOD(bool, IsDtxPacket, (), (const, override));
 
-  MOCK_CONST_METHOD1(
-      Decode,
-      absl::optional<DecodeResult>(rtc::ArrayView<int16_t> decoded));
+  MOCK_METHOD(absl::optional<DecodeResult>,
+              Decode,
+              (rtc::ArrayView<int16_t> decoded),
+              (const, override));
 };
 
 // Helper class to generate packets. Packets must be deleted by the user.
diff --git a/modules/audio_mixer/audio_mixer_impl_unittest.cc b/modules/audio_mixer/audio_mixer_impl_unittest.cc
index f899dd6..53cd45d 100644
--- a/modules/audio_mixer/audio_mixer_impl_unittest.cc
+++ b/modules/audio_mixer/audio_mixer_impl_unittest.cc
@@ -74,11 +74,13 @@
         .WillByDefault(Return(kDefaultSampleRateHz));
   }
 
-  MOCK_METHOD2(GetAudioFrameWithInfo,
-               AudioFrameInfo(int sample_rate_hz, AudioFrame* audio_frame));
+  MOCK_METHOD(AudioFrameInfo,
+              GetAudioFrameWithInfo,
+              (int sample_rate_hz, AudioFrame* audio_frame),
+              (override));
 
-  MOCK_CONST_METHOD0(PreferredSampleRate, int());
-  MOCK_CONST_METHOD0(Ssrc, int());
+  MOCK_METHOD(int, PreferredSampleRate, (), (const, override));
+  MOCK_METHOD(int, Ssrc, (), (const, override));
 
   AudioFrame* fake_frame() { return &fake_frame_; }
   AudioFrameInfo fake_info() { return fake_audio_frame_info_; }
diff --git a/modules/audio_processing/aec3/mock/mock_block_processor.h b/modules/audio_processing/aec3/mock/mock_block_processor.h
index e9a95c8..e1eb267 100644
--- a/modules/audio_processing/aec3/mock/mock_block_processor.h
+++ b/modules/audio_processing/aec3/mock/mock_block_processor.h
@@ -24,17 +24,26 @@
   MockBlockProcessor();
   virtual ~MockBlockProcessor();
 
-  MOCK_METHOD4(
-      ProcessCapture,
-      void(bool level_change,
-           bool saturated_microphone_signal,
-           std::vector<std::vector<std::vector<float>>>* linear_output,
-           std::vector<std::vector<std::vector<float>>>* capture_block));
-  MOCK_METHOD1(BufferRender,
-               void(const std::vector<std::vector<std::vector<float>>>& block));
-  MOCK_METHOD1(UpdateEchoLeakageStatus, void(bool leakage_detected));
-  MOCK_CONST_METHOD1(GetMetrics, void(EchoControl::Metrics* metrics));
-  MOCK_METHOD1(SetAudioBufferDelay, void(int delay_ms));
+  MOCK_METHOD(void,
+              ProcessCapture,
+              (bool level_change,
+               bool saturated_microphone_signal,
+               std::vector<std::vector<std::vector<float>>>* linear_output,
+               std::vector<std::vector<std::vector<float>>>* capture_block),
+              (override));
+  MOCK_METHOD(void,
+              BufferRender,
+              (const std::vector<std::vector<std::vector<float>>>& block),
+              (override));
+  MOCK_METHOD(void,
+              UpdateEchoLeakageStatus,
+              (bool leakage_detected),
+              (override));
+  MOCK_METHOD(void,
+              GetMetrics,
+              (EchoControl::Metrics * metrics),
+              (const, override));
+  MOCK_METHOD(void, SetAudioBufferDelay, (int delay_ms), (override));
 };
 
 }  // namespace test
diff --git a/modules/audio_processing/aec3/mock/mock_echo_remover.h b/modules/audio_processing/aec3/mock/mock_echo_remover.h
index 6c580f3..8a3044b 100644
--- a/modules/audio_processing/aec3/mock/mock_echo_remover.h
+++ b/modules/audio_processing/aec3/mock/mock_echo_remover.h
@@ -27,16 +27,23 @@
   MockEchoRemover();
   virtual ~MockEchoRemover();
 
-  MOCK_METHOD6(ProcessCapture,
-               void(EchoPathVariability echo_path_variability,
-                    bool capture_signal_saturation,
-                    const absl::optional<DelayEstimate>& delay_estimate,
-                    RenderBuffer* render_buffer,
-                    std::vector<std::vector<std::vector<float>>>* linear_output,
-                    std::vector<std::vector<std::vector<float>>>* capture));
-  MOCK_CONST_METHOD0(Delay, absl::optional<int>());
-  MOCK_METHOD1(UpdateEchoLeakageStatus, void(bool leakage_detected));
-  MOCK_CONST_METHOD1(GetMetrics, void(EchoControl::Metrics* metrics));
+  MOCK_METHOD(void,
+              ProcessCapture,
+              (EchoPathVariability echo_path_variability,
+               bool capture_signal_saturation,
+               const absl::optional<DelayEstimate>& delay_estimate,
+               RenderBuffer* render_buffer,
+               std::vector<std::vector<std::vector<float>>>* linear_output,
+               std::vector<std::vector<std::vector<float>>>* capture),
+              (override));
+  MOCK_METHOD(void,
+              UpdateEchoLeakageStatus,
+              (bool leakage_detected),
+              (override));
+  MOCK_METHOD(void,
+              GetMetrics,
+              (EchoControl::Metrics * metrics),
+              (const, override));
 };
 
 }  // namespace test
diff --git a/modules/audio_processing/aec3/mock/mock_render_delay_buffer.h b/modules/audio_processing/aec3/mock/mock_render_delay_buffer.h
index f83c670..26f58cf 100644
--- a/modules/audio_processing/aec3/mock/mock_render_delay_buffer.h
+++ b/modules/audio_processing/aec3/mock/mock_render_delay_buffer.h
@@ -27,21 +27,26 @@
   MockRenderDelayBuffer(int sample_rate_hz, size_t num_channels);
   virtual ~MockRenderDelayBuffer();
 
-  MOCK_METHOD0(Reset, void());
-  MOCK_METHOD1(Insert,
-               RenderDelayBuffer::BufferingEvent(
-                   const std::vector<std::vector<std::vector<float>>>& block));
-  MOCK_METHOD0(PrepareCaptureProcessing, RenderDelayBuffer::BufferingEvent());
-  MOCK_METHOD1(AlignFromDelay, bool(size_t delay));
-  MOCK_METHOD0(AlignFromExternalDelay, void());
-  MOCK_CONST_METHOD0(Delay, size_t());
-  MOCK_CONST_METHOD0(MaxDelay, size_t());
-  MOCK_METHOD0(GetRenderBuffer, RenderBuffer*());
-  MOCK_CONST_METHOD0(GetDownsampledRenderBuffer,
-                     const DownsampledRenderBuffer&());
-  MOCK_CONST_METHOD1(CausalDelay, bool(size_t delay));
-  MOCK_METHOD1(SetAudioBufferDelay, void(int delay_ms));
-  MOCK_METHOD0(HasReceivedBufferDelay, bool());
+  MOCK_METHOD(void, Reset, (), (override));
+  MOCK_METHOD(RenderDelayBuffer::BufferingEvent,
+              Insert,
+              (const std::vector<std::vector<std::vector<float>>>& block),
+              (override));
+  MOCK_METHOD(RenderDelayBuffer::BufferingEvent,
+              PrepareCaptureProcessing,
+              (),
+              (override));
+  MOCK_METHOD(bool, AlignFromDelay, (size_t delay), (override));
+  MOCK_METHOD(void, AlignFromExternalDelay, (), (override));
+  MOCK_METHOD(size_t, Delay, (), (const, override));
+  MOCK_METHOD(size_t, MaxDelay, (), (const, override));
+  MOCK_METHOD(RenderBuffer*, GetRenderBuffer, (), (override));
+  MOCK_METHOD(const DownsampledRenderBuffer&,
+              GetDownsampledRenderBuffer,
+              (),
+              (const, override));
+  MOCK_METHOD(void, SetAudioBufferDelay, (int delay_ms), (override));
+  MOCK_METHOD(bool, HasReceivedBufferDelay, (), (override));
 
  private:
   RenderBuffer* FakeGetRenderBuffer() { return &render_buffer_; }
diff --git a/modules/audio_processing/aec3/mock/mock_render_delay_controller.h b/modules/audio_processing/aec3/mock/mock_render_delay_controller.h
index e72333e..67d8bae 100644
--- a/modules/audio_processing/aec3/mock/mock_render_delay_controller.h
+++ b/modules/audio_processing/aec3/mock/mock_render_delay_controller.h
@@ -25,14 +25,15 @@
   MockRenderDelayController();
   virtual ~MockRenderDelayController();
 
-  MOCK_METHOD1(Reset, void(bool reset_delay_statistics));
-  MOCK_METHOD0(LogRenderCall, void());
-  MOCK_METHOD3(GetDelay,
-               absl::optional<DelayEstimate>(
-                   const DownsampledRenderBuffer& render_buffer,
-                   size_t render_delay_buffer_delay,
-                   const std::vector<std::vector<float>>& capture));
-  MOCK_CONST_METHOD0(HasClockdrift, bool());
+  MOCK_METHOD(void, Reset, (bool reset_delay_statistics), (override));
+  MOCK_METHOD(void, LogRenderCall, (), (override));
+  MOCK_METHOD(absl::optional<DelayEstimate>,
+              GetDelay,
+              (const DownsampledRenderBuffer& render_buffer,
+               size_t render_delay_buffer_delay,
+               const std::vector<std::vector<float>>& capture),
+              (override));
+  MOCK_METHOD(bool, HasClockdrift, (), (const, override));
 };
 
 }  // namespace test
diff --git a/modules/audio_processing/aec_dump/mock_aec_dump.h b/modules/audio_processing/aec_dump/mock_aec_dump.h
index 65306a7..b396739 100644
--- a/modules/audio_processing/aec_dump/mock_aec_dump.h
+++ b/modules/audio_processing/aec_dump/mock_aec_dump.h
@@ -25,36 +25,54 @@
   MockAecDump();
   virtual ~MockAecDump();
 
-  MOCK_METHOD2(WriteInitMessage,
-               void(const ProcessingConfig& api_format, int64_t time_now_ms));
+  MOCK_METHOD(void,
+              WriteInitMessage,
+              (const ProcessingConfig& api_format, int64_t time_now_ms),
+              (override));
 
-  MOCK_METHOD1(AddCaptureStreamInput,
-               void(const AudioFrameView<const float>& src));
-  MOCK_METHOD1(AddCaptureStreamOutput,
-               void(const AudioFrameView<const float>& src));
-  MOCK_METHOD3(AddCaptureStreamInput,
-               void(const int16_t* const data,
-                    int num_channels,
-                    int samples_per_channel));
-  MOCK_METHOD3(AddCaptureStreamOutput,
-               void(const int16_t* const data,
-                    int num_channels,
-                    int samples_per_channel));
-  MOCK_METHOD1(AddAudioProcessingState,
-               void(const AudioProcessingState& state));
-  MOCK_METHOD0(WriteCaptureStreamMessage, void());
+  MOCK_METHOD(void,
+              AddCaptureStreamInput,
+              (const AudioFrameView<const float>& src),
+              (override));
+  MOCK_METHOD(void,
+              AddCaptureStreamOutput,
+              (const AudioFrameView<const float>& src),
+              (override));
+  MOCK_METHOD(void,
+              AddCaptureStreamInput,
+              (const int16_t* const data,
+               int num_channels,
+               int samples_per_channel),
+              (override));
+  MOCK_METHOD(void,
+              AddCaptureStreamOutput,
+              (const int16_t* const data,
+               int num_channels,
+               int samples_per_channel),
+              (override));
+  MOCK_METHOD(void,
+              AddAudioProcessingState,
+              (const AudioProcessingState& state),
+              (override));
+  MOCK_METHOD(void, WriteCaptureStreamMessage, (), (override));
 
-  MOCK_METHOD3(WriteRenderStreamMessage,
-               void(const int16_t* const data,
-                    int num_channels,
-                    int samples_per_channel));
-  MOCK_METHOD1(WriteRenderStreamMessage,
-               void(const AudioFrameView<const float>& src));
+  MOCK_METHOD(void,
+              WriteRenderStreamMessage,
+              (const int16_t* const data,
+               int num_channels,
+               int samples_per_channel),
+              (override));
+  MOCK_METHOD(void,
+              WriteRenderStreamMessage,
+              (const AudioFrameView<const float>& src),
+              (override));
 
-  MOCK_METHOD1(WriteConfig, void(const InternalAPMConfig& config));
+  MOCK_METHOD(void, WriteConfig, (const InternalAPMConfig& config), (override));
 
-  MOCK_METHOD1(WriteRuntimeSetting,
-               void(const AudioProcessing::RuntimeSetting& config));
+  MOCK_METHOD(void,
+              WriteRuntimeSetting,
+              (const AudioProcessing::RuntimeSetting& config),
+              (override));
 };
 
 }  // namespace test
diff --git a/modules/audio_processing/agc/agc_manager_direct_unittest.cc b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
index c5e65ad..995801a 100644
--- a/modules/audio_processing/agc/agc_manager_direct_unittest.cc
+++ b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
@@ -37,22 +37,23 @@
 class MockGainControl : public GainControl {
  public:
   virtual ~MockGainControl() {}
-  MOCK_METHOD0(Initialize, void());
-  MOCK_CONST_METHOD0(is_enabled, bool());
-  MOCK_METHOD1(set_stream_analog_level, int(int level));
-  MOCK_CONST_METHOD0(stream_analog_level, int());
-  MOCK_METHOD1(set_mode, int(Mode mode));
-  MOCK_CONST_METHOD0(mode, Mode());
-  MOCK_METHOD1(set_target_level_dbfs, int(int level));
-  MOCK_CONST_METHOD0(target_level_dbfs, int());
-  MOCK_METHOD1(set_compression_gain_db, int(int gain));
-  MOCK_CONST_METHOD0(compression_gain_db, int());
-  MOCK_METHOD1(enable_limiter, int(bool enable));
-  MOCK_CONST_METHOD0(is_limiter_enabled, bool());
-  MOCK_METHOD2(set_analog_level_limits, int(int minimum, int maximum));
-  MOCK_CONST_METHOD0(analog_level_minimum, int());
-  MOCK_CONST_METHOD0(analog_level_maximum, int());
-  MOCK_CONST_METHOD0(stream_is_saturated, bool());
+  MOCK_METHOD(int, set_stream_analog_level, (int level), (override));
+  MOCK_METHOD(int, stream_analog_level, (), (const, override));
+  MOCK_METHOD(int, set_mode, (Mode mode), (override));
+  MOCK_METHOD(Mode, mode, (), (const, override));
+  MOCK_METHOD(int, set_target_level_dbfs, (int level), (override));
+  MOCK_METHOD(int, target_level_dbfs, (), (const, override));
+  MOCK_METHOD(int, set_compression_gain_db, (int gain), (override));
+  MOCK_METHOD(int, compression_gain_db, (), (const, override));
+  MOCK_METHOD(int, enable_limiter, (bool enable), (override));
+  MOCK_METHOD(bool, is_limiter_enabled, (), (const, override));
+  MOCK_METHOD(int,
+              set_analog_level_limits,
+              (int minimum, int maximum),
+              (override));
+  MOCK_METHOD(int, analog_level_minimum, (), (const, override));
+  MOCK_METHOD(int, analog_level_maximum, (), (const, override));
+  MOCK_METHOD(bool, stream_is_saturated, (), (const, override));
 };
 
 }  // namespace
diff --git a/modules/audio_processing/agc/mock_agc.h b/modules/audio_processing/agc/mock_agc.h
index 6542acc..0ef41c6 100644
--- a/modules/audio_processing/agc/mock_agc.h
+++ b/modules/audio_processing/agc/mock_agc.h
@@ -19,14 +19,14 @@
 class MockAgc : public Agc {
  public:
   virtual ~MockAgc() {}
-  MOCK_METHOD3(Process,
-               void(const int16_t* audio, size_t length, int sample_rate_hz));
-  MOCK_METHOD1(GetRmsErrorDb, bool(int* error));
-  MOCK_METHOD0(Reset, void());
-  MOCK_METHOD1(set_target_level_dbfs, int(int level));
-  MOCK_CONST_METHOD0(target_level_dbfs, int());
-  MOCK_METHOD1(EnableStandaloneVad, void(bool enable));
-  MOCK_CONST_METHOD0(standalone_vad_enabled, bool());
+  MOCK_METHOD(void,
+              Process,
+              (const int16_t* audio, size_t length, int sample_rate_hz),
+              (override));
+  MOCK_METHOD(bool, GetRmsErrorDb, (int* error), (override));
+  MOCK_METHOD(void, Reset, (), (override));
+  MOCK_METHOD(int, set_target_level_dbfs, (int level), (override));
+  MOCK_METHOD(int, target_level_dbfs, (), (const, override));
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc
index 71352bc..8f28941 100644
--- a/modules/audio_processing/audio_processing_impl_unittest.cc
+++ b/modules/audio_processing/audio_processing_impl_unittest.cc
@@ -37,13 +37,13 @@
   explicit MockInitialize(const webrtc::Config& config)
       : AudioProcessingImpl(config) {}
 
-  MOCK_METHOD0(InitializeLocked, int());
+  MOCK_METHOD(int, InitializeLocked, (), (override));
   int RealInitializeLocked() RTC_NO_THREAD_SAFETY_ANALYSIS {
     return AudioProcessingImpl::InitializeLocked();
   }
 
-  MOCK_CONST_METHOD0(AddRef, void());
-  MOCK_CONST_METHOD0(Release, rtc::RefCountReleaseStatus());
+  MOCK_METHOD(void, AddRef, (), (const, override));
+  MOCK_METHOD(rtc::RefCountReleaseStatus, Release, (), (const, override));
 };
 
 // Creates MockEchoControl instances and provides a raw pointer access to
diff --git a/modules/audio_processing/include/mock_audio_processing.h b/modules/audio_processing/include/mock_audio_processing.h
index bdae99a..562b23f 100644
--- a/modules/audio_processing/include/mock_audio_processing.h
+++ b/modules/audio_processing/include/mock_audio_processing.h
@@ -24,35 +24,47 @@
 class MockCustomProcessing : public CustomProcessing {
  public:
   virtual ~MockCustomProcessing() {}
-  MOCK_METHOD2(Initialize, void(int sample_rate_hz, int num_channels));
-  MOCK_METHOD1(Process, void(AudioBuffer* audio));
-  MOCK_METHOD1(SetRuntimeSetting,
-               void(AudioProcessing::RuntimeSetting setting));
-  MOCK_CONST_METHOD0(ToString, std::string());
+  MOCK_METHOD(void,
+              Initialize,
+              (int sample_rate_hz, int num_channels),
+              (override));
+  MOCK_METHOD(void, Process, (AudioBuffer * audio), (override));
+  MOCK_METHOD(void,
+              SetRuntimeSetting,
+              (AudioProcessing::RuntimeSetting setting),
+              (override));
+  MOCK_METHOD(std::string, ToString, (), (const, override));
 };
 
 class MockCustomAudioAnalyzer : public CustomAudioAnalyzer {
  public:
   virtual ~MockCustomAudioAnalyzer() {}
-  MOCK_METHOD2(Initialize, void(int sample_rate_hz, int num_channels));
-  MOCK_METHOD1(Analyze, void(const AudioBuffer* audio));
-  MOCK_CONST_METHOD0(ToString, std::string());
+  MOCK_METHOD(void,
+              Initialize,
+              (int sample_rate_hz, int num_channels),
+              (override));
+  MOCK_METHOD(void, Analyze, (const AudioBuffer* audio), (override));
+  MOCK_METHOD(std::string, ToString, (), (const, override));
 };
 
 class MockEchoControl : public EchoControl {
  public:
   virtual ~MockEchoControl() {}
-  MOCK_METHOD1(AnalyzeRender, void(AudioBuffer* render));
-  MOCK_METHOD1(AnalyzeCapture, void(AudioBuffer* capture));
-  MOCK_METHOD2(ProcessCapture,
-               void(AudioBuffer* capture, bool echo_path_change));
-  MOCK_METHOD3(ProcessCapture,
-               void(AudioBuffer* capture,
-                    AudioBuffer* linear_output,
-                    bool echo_path_change));
-  MOCK_CONST_METHOD0(GetMetrics, Metrics());
-  MOCK_METHOD1(SetAudioBufferDelay, void(int delay_ms));
-  MOCK_CONST_METHOD0(ActiveProcessing, bool());
+  MOCK_METHOD(void, AnalyzeRender, (AudioBuffer * render), (override));
+  MOCK_METHOD(void, AnalyzeCapture, (AudioBuffer * capture), (override));
+  MOCK_METHOD(void,
+              ProcessCapture,
+              (AudioBuffer * capture, bool echo_path_change),
+              (override));
+  MOCK_METHOD(void,
+              ProcessCapture,
+              (AudioBuffer * capture,
+               AudioBuffer* linear_output,
+               bool echo_path_change),
+              (override));
+  MOCK_METHOD(Metrics, GetMetrics, (), (const, override));
+  MOCK_METHOD(void, SetAudioBufferDelay, (int delay_ms), (override));
+  MOCK_METHOD(bool, ActiveProcessing, (), (const, override));
 };
 
 class MockAudioProcessing : public ::testing::NiceMock<AudioProcessing> {
@@ -61,87 +73,93 @@
 
   virtual ~MockAudioProcessing() {}
 
-  MOCK_METHOD0(Initialize, int());
-  MOCK_METHOD6(Initialize,
-               int(int capture_input_sample_rate_hz,
-                   int capture_output_sample_rate_hz,
-                   int render_sample_rate_hz,
-                   ChannelLayout capture_input_layout,
-                   ChannelLayout capture_output_layout,
-                   ChannelLayout render_input_layout));
-  MOCK_METHOD1(Initialize, int(const ProcessingConfig& processing_config));
-  MOCK_METHOD1(ApplyConfig, void(const Config& config));
-  MOCK_METHOD1(SetExtraOptions, void(const webrtc::Config& config));
-  MOCK_CONST_METHOD0(proc_sample_rate_hz, int());
-  MOCK_CONST_METHOD0(proc_split_sample_rate_hz, int());
-  MOCK_CONST_METHOD0(num_input_channels, size_t());
-  MOCK_CONST_METHOD0(num_proc_channels, size_t());
-  MOCK_CONST_METHOD0(num_output_channels, size_t());
-  MOCK_CONST_METHOD0(num_reverse_channels, size_t());
-  MOCK_METHOD1(set_output_will_be_muted, void(bool muted));
-  MOCK_METHOD1(SetRuntimeSetting, void(RuntimeSetting setting));
-  MOCK_METHOD4(ProcessStream,
-               int(const int16_t* const src,
-                   const StreamConfig& input_config,
-                   const StreamConfig& output_config,
-                   int16_t* const dest));
-  MOCK_METHOD7(ProcessStream,
-               int(const float* const* src,
-                   size_t samples_per_channel,
-                   int input_sample_rate_hz,
-                   ChannelLayout input_layout,
-                   int output_sample_rate_hz,
-                   ChannelLayout output_layout,
-                   float* const* dest));
-  MOCK_METHOD4(ProcessStream,
-               int(const float* const* src,
-                   const StreamConfig& input_config,
-                   const StreamConfig& output_config,
-                   float* const* dest));
-  MOCK_METHOD4(ProcessReverseStream,
-               int(const int16_t* const src,
-                   const StreamConfig& input_config,
-                   const StreamConfig& output_config,
-                   int16_t* const dest));
-  MOCK_METHOD4(AnalyzeReverseStream,
-               int(const float* const* data,
-                   size_t samples_per_channel,
-                   int sample_rate_hz,
-                   ChannelLayout layout));
-  MOCK_METHOD2(AnalyzeReverseStream,
-               int(const float* const* data,
-                   const StreamConfig& reverse_config));
-  MOCK_METHOD4(ProcessReverseStream,
-               int(const float* const* src,
-                   const StreamConfig& input_config,
-                   const StreamConfig& output_config,
-                   float* const* dest));
-  MOCK_CONST_METHOD1(
-      GetLinearAecOutput,
-      bool(rtc::ArrayView<std::array<float, 160>> linear_output));
-  MOCK_METHOD1(set_stream_delay_ms, int(int delay));
-  MOCK_CONST_METHOD0(stream_delay_ms, int());
-  MOCK_CONST_METHOD0(was_stream_delay_set, bool());
-  MOCK_METHOD1(set_stream_key_pressed, void(bool key_pressed));
-  MOCK_METHOD1(set_delay_offset_ms, void(int offset));
-  MOCK_CONST_METHOD0(delay_offset_ms, int());
-  MOCK_METHOD1(set_stream_analog_level, void(int));
-  MOCK_CONST_METHOD0(recommended_stream_analog_level, int());
-  MOCK_METHOD3(CreateAndAttachAecDump,
-               bool(const std::string& file_name,
-                    int64_t max_log_size_bytes,
-                    rtc::TaskQueue* worker_queue));
-  MOCK_METHOD3(CreateAndAttachAecDump,
-               bool(FILE* handle,
-                    int64_t max_log_size_bytes,
-                    rtc::TaskQueue* worker_queue));
-  MOCK_METHOD1(AttachAecDump, void(std::unique_ptr<AecDump>));
-  MOCK_METHOD0(DetachAecDump, void());
+  MOCK_METHOD(int, Initialize, (), (override));
+  MOCK_METHOD(int,
+              Initialize,
+              (int capture_input_sample_rate_hz,
+               int capture_output_sample_rate_hz,
+               int render_sample_rate_hz,
+               ChannelLayout capture_input_layout,
+               ChannelLayout capture_output_layout,
+               ChannelLayout render_input_layout),
+              (override));
+  MOCK_METHOD(int,
+              Initialize,
+              (const ProcessingConfig& processing_config),
+              (override));
+  MOCK_METHOD(void, ApplyConfig, (const Config& config), (override));
+  MOCK_METHOD(void,
+              SetExtraOptions,
+              (const webrtc::Config& config),
+              (override));
+  MOCK_METHOD(int, proc_sample_rate_hz, (), (const, override));
+  MOCK_METHOD(int, proc_split_sample_rate_hz, (), (const, override));
+  MOCK_METHOD(size_t, num_input_channels, (), (const, override));
+  MOCK_METHOD(size_t, num_proc_channels, (), (const, override));
+  MOCK_METHOD(size_t, num_output_channels, (), (const, override));
+  MOCK_METHOD(size_t, num_reverse_channels, (), (const, override));
+  MOCK_METHOD(void, set_output_will_be_muted, (bool muted), (override));
+  MOCK_METHOD(void, SetRuntimeSetting, (RuntimeSetting setting), (override));
+  MOCK_METHOD(int,
+              ProcessStream,
+              (const int16_t* const src,
+               const StreamConfig& input_config,
+               const StreamConfig& output_config,
+               int16_t* const dest),
+              (override));
+  MOCK_METHOD(int,
+              ProcessStream,
+              (const float* const* src,
+               const StreamConfig& input_config,
+               const StreamConfig& output_config,
+               float* const* dest),
+              (override));
+  MOCK_METHOD(int,
+              ProcessReverseStream,
+              (const int16_t* const src,
+               const StreamConfig& input_config,
+               const StreamConfig& output_config,
+               int16_t* const dest),
+              (override));
+  MOCK_METHOD(int,
+              AnalyzeReverseStream,
+              (const float* const* data, const StreamConfig& reverse_config),
+              (override));
+  MOCK_METHOD(int,
+              ProcessReverseStream,
+              (const float* const* src,
+               const StreamConfig& input_config,
+               const StreamConfig& output_config,
+               float* const* dest),
+              (override));
+  MOCK_METHOD(bool,
+              GetLinearAecOutput,
+              ((rtc::ArrayView<std::array<float, 160>> linear_output)),
+              (const, override));
+  MOCK_METHOD(int, set_stream_delay_ms, (int delay), (override));
+  MOCK_METHOD(int, stream_delay_ms, (), (const, override));
+  MOCK_METHOD(void, set_stream_key_pressed, (bool key_pressed), (override));
+  MOCK_METHOD(void, set_stream_analog_level, (int), (override));
+  MOCK_METHOD(int, recommended_stream_analog_level, (), (const, override));
+  MOCK_METHOD(bool,
+              CreateAndAttachAecDump,
+              (const std::string& file_name,
+               int64_t max_log_size_bytes,
+               rtc::TaskQueue* worker_queue),
+              (override));
+  MOCK_METHOD(bool,
+              CreateAndAttachAecDump,
+              (FILE * handle,
+               int64_t max_log_size_bytes,
+               rtc::TaskQueue* worker_queue),
+              (override));
+  MOCK_METHOD(void, AttachAecDump, (std::unique_ptr<AecDump>), (override));
+  MOCK_METHOD(void, DetachAecDump, (), (override));
 
-  MOCK_METHOD0(GetStatistics, AudioProcessingStats());
-  MOCK_METHOD1(GetStatistics, AudioProcessingStats(bool));
+  MOCK_METHOD(AudioProcessingStats, GetStatistics, (), (override));
+  MOCK_METHOD(AudioProcessingStats, GetStatistics, (bool), (override));
 
-  MOCK_CONST_METHOD0(GetConfig, AudioProcessing::Config());
+  MOCK_METHOD(AudioProcessing::Config, GetConfig, (), (const, override));
 };
 
 }  // namespace test
diff --git a/modules/audio_processing/test/conversational_speech/mock_wavreader.h b/modules/audio_processing/test/conversational_speech/mock_wavreader.h
index 591299e..94e20b9 100644
--- a/modules/audio_processing/test/conversational_speech/mock_wavreader.h
+++ b/modules/audio_processing/test/conversational_speech/mock_wavreader.h
@@ -28,12 +28,12 @@
   ~MockWavReader();
 
   // TODO(alessiob): use ON_CALL to return random samples if needed.
-  MOCK_METHOD1(ReadFloatSamples, size_t(rtc::ArrayView<float>));
-  MOCK_METHOD1(ReadInt16Samples, size_t(rtc::ArrayView<int16_t>));
+  MOCK_METHOD(size_t, ReadFloatSamples, (rtc::ArrayView<float>), (override));
+  MOCK_METHOD(size_t, ReadInt16Samples, (rtc::ArrayView<int16_t>), (override));
 
-  MOCK_CONST_METHOD0(SampleRate, int());
-  MOCK_CONST_METHOD0(NumChannels, size_t());
-  MOCK_CONST_METHOD0(NumSamples, size_t());
+  MOCK_METHOD(int, SampleRate, (), (const, override));
+  MOCK_METHOD(size_t, NumChannels, (), (const, override));
+  MOCK_METHOD(size_t, NumSamples, (), (const, override));
 
  private:
   const int sample_rate_;
diff --git a/modules/audio_processing/test/conversational_speech/mock_wavreader_factory.h b/modules/audio_processing/test/conversational_speech/mock_wavreader_factory.h
index e84f5f3..c2db85f 100644
--- a/modules/audio_processing/test/conversational_speech/mock_wavreader_factory.h
+++ b/modules/audio_processing/test/conversational_speech/mock_wavreader_factory.h
@@ -36,8 +36,10 @@
   explicit MockWavReaderFactory(const Params& default_params);
   ~MockWavReaderFactory();
 
-  MOCK_CONST_METHOD1(Create,
-                     std::unique_ptr<WavReaderInterface>(const std::string&));
+  MOCK_METHOD(std::unique_ptr<WavReaderInterface>,
+              Create,
+              (const std::string&),
+              (const, override));
 
  private:
   // Creates a MockWavReader instance using the parameters in
diff --git a/modules/audio_processing/test/echo_control_mock.h b/modules/audio_processing/test/echo_control_mock.h
index 95d3be5..927de43 100644
--- a/modules/audio_processing/test/echo_control_mock.h
+++ b/modules/audio_processing/test/echo_control_mock.h
@@ -20,17 +20,21 @@
 
 class MockEchoControl : public EchoControl {
  public:
-  MOCK_METHOD1(AnalyzeRender, void(AudioBuffer* render));
-  MOCK_METHOD1(AnalyzeCapture, void(AudioBuffer* capture));
-  MOCK_METHOD2(ProcessCapture,
-               void(AudioBuffer* capture, bool echo_path_change));
-  MOCK_METHOD3(ProcessCapture,
-               void(AudioBuffer* capture,
-                    AudioBuffer* linear_output,
-                    bool echo_path_change));
-  MOCK_CONST_METHOD0(GetMetrics, EchoControl::Metrics());
-  MOCK_METHOD1(SetAudioBufferDelay, void(int delay_ms));
-  MOCK_CONST_METHOD0(ActiveProcessing, bool());
+  MOCK_METHOD(void, AnalyzeRender, (AudioBuffer * render), (override));
+  MOCK_METHOD(void, AnalyzeCapture, (AudioBuffer * capture), (override));
+  MOCK_METHOD(void,
+              ProcessCapture,
+              (AudioBuffer * capture, bool echo_path_change),
+              (override));
+  MOCK_METHOD(void,
+              ProcessCapture,
+              (AudioBuffer * capture,
+               AudioBuffer* linear_output,
+               bool echo_path_change),
+              (override));
+  MOCK_METHOD(EchoControl::Metrics, GetMetrics, (), (const, override));
+  MOCK_METHOD(void, SetAudioBufferDelay, (int delay_ms), (override));
+  MOCK_METHOD(bool, ActiveProcessing, (), (const, override));
 };
 
 }  // namespace webrtc
