diff --git a/tools/test/data_interface_mock.hpp b/tools/test/data_interface_mock.hpp
index 0ee799b..c69de72 100644
--- a/tools/test/data_interface_mock.hpp
+++ b/tools/test/data_interface_mock.hpp
@@ -13,8 +13,10 @@
   public:
     virtual ~DataInterfaceMock() = default;
 
-    MOCK_METHOD2(sendContents, bool(const std::string&, std::uint16_t));
-    MOCK_CONST_METHOD0(supportedType, ipmi_flash::FirmwareFlags::UpdateFlags());
+    MOCK_METHOD(bool, sendContents, (const std::string&, std::uint16_t),
+                (override));
+    MOCK_METHOD(ipmi_flash::FirmwareFlags::UpdateFlags, supportedType, (),
+                (const, override));
 };
 
 } // namespace host_tool
diff --git a/tools/test/internal_sys_mock.hpp b/tools/test/internal_sys_mock.hpp
index 97f95bf..fcd68bb 100644
--- a/tools/test/internal_sys_mock.hpp
+++ b/tools/test/internal_sys_mock.hpp
@@ -16,24 +16,29 @@
   public:
     virtual ~InternalSysMock() = default;
 
-    MOCK_CONST_METHOD2(open, int(const char*, int));
-    MOCK_CONST_METHOD3(read, int(int, void*, std::size_t));
-    MOCK_CONST_METHOD4(pread, int(int, void*, std::size_t, off_t));
-    MOCK_CONST_METHOD4(pwrite, int(int, const void*, std::size_t, off_t));
-    MOCK_CONST_METHOD1(close, int(int));
-    MOCK_CONST_METHOD6(mmap, void*(void*, std::size_t, int, int, int, off_t));
-    MOCK_CONST_METHOD2(munmap, int(void*, std::size_t));
-    MOCK_CONST_METHOD0(getpagesize, int());
-    MOCK_CONST_METHOD3(ioctl, int(int, unsigned long, void*));
-    MOCK_CONST_METHOD3(poll, int(struct pollfd*, nfds_t, int));
-    MOCK_CONST_METHOD3(socket, int(int, int, int));
-    MOCK_CONST_METHOD3(connect, int(int, const struct sockaddr*, socklen_t));
-    MOCK_CONST_METHOD4(sendfile, ssize_t(int, int, off_t*, size_t));
-    MOCK_CONST_METHOD4(getaddrinfo,
-                       int(const char*, const char*, const struct addrinfo*,
-                           struct addrinfo**));
-    MOCK_CONST_METHOD1(freeaddrinfo, void(struct addrinfo*));
-    MOCK_CONST_METHOD1(getSize, std::int64_t(const char*));
+    MOCK_METHOD(int, open, (const char*, int), (const override));
+    MOCK_METHOD(int, read, (int, void*, std::size_t), (const override));
+    MOCK_METHOD(int, pread, (int, void*, std::size_t, off_t), (const override));
+    MOCK_METHOD(int, pwrite, (int, const void*, std::size_t, off_t),
+                (const override));
+    MOCK_METHOD(int, close, (int), (const override));
+    MOCK_METHOD(void*, mmap, (void*, std::size_t, int, int, int, off_t),
+                (const override));
+    MOCK_METHOD(int, munmap, (void*, std::size_t), (const override));
+    MOCK_METHOD(int, getpagesize, (), (const override));
+    MOCK_METHOD(int, ioctl, (int, unsigned long, void*), (const override));
+    MOCK_METHOD(int, poll, (struct pollfd*, nfds_t, int), (const override));
+    MOCK_METHOD(int, socket, (int, int, int), (const override));
+    MOCK_METHOD(int, connect, (int, const struct sockaddr*, socklen_t),
+                (const override));
+    MOCK_METHOD(ssize_t, sendfile, (int, int, off_t*, size_t),
+                (const override));
+    MOCK_METHOD(int, getaddrinfo,
+                (const char*, const char*, const struct addrinfo*,
+                 struct addrinfo**),
+                (const override));
+    MOCK_METHOD(void, freeaddrinfo, (struct addrinfo*), (const override));
+    MOCK_METHOD(std::int64_t, getSize, (const char*), (const override));
 };
 
 } // namespace internal
diff --git a/tools/test/io_mock.hpp b/tools/test/io_mock.hpp
index eddd6ff..f7d25c5 100644
--- a/tools/test/io_mock.hpp
+++ b/tools/test/io_mock.hpp
@@ -12,10 +12,11 @@
   public:
     ~HostIoInterfaceMock() = default;
 
-    MOCK_METHOD3(read, bool(const std::size_t, const std::size_t, void* const));
-
-    MOCK_METHOD3(write,
-                 bool(const std::size_t, const std::size_t, const void* const));
+    MOCK_METHOD(bool, read, (const std::size_t, const std::size_t, void* const),
+                (override));
+    MOCK_METHOD(bool, write,
+                (const std::size_t, const std::size_t, const void* const),
+                (override));
 };
 
 } // namespace host_tool
diff --git a/tools/test/pciaccess_mock.hpp b/tools/test/pciaccess_mock.hpp
index 738a1b1..f93e1fd 100644
--- a/tools/test/pciaccess_mock.hpp
+++ b/tools/test/pciaccess_mock.hpp
@@ -10,23 +10,26 @@
 class PciAccessMock : public PciAccess
 {
   public:
-    MOCK_CONST_METHOD1(pci_id_match_iterator_create,
-                       struct pci_device_iterator*(const struct pci_id_match*));
-    MOCK_CONST_METHOD1(pci_iterator_destroy, void(struct pci_device_iterator*));
-    MOCK_CONST_METHOD1(pci_device_enable, void(struct pci_device*));
-    MOCK_CONST_METHOD1(pci_device_next,
-                       struct pci_device*(struct pci_device_iterator*));
-    MOCK_CONST_METHOD1(pci_device_probe, int(struct pci_device*));
-    MOCK_CONST_METHOD3(pci_device_cfg_read_u8,
-                       int(struct pci_device* dev, std::uint8_t* data,
-                           pciaddr_t offset));
-    MOCK_CONST_METHOD3(pci_device_cfg_write_u8,
-                       int(struct pci_device* dev, std::uint8_t data,
-                           pciaddr_t offset));
-    MOCK_CONST_METHOD5(pci_device_map_range, int(struct pci_device*, pciaddr_t,
-                                                 pciaddr_t, unsigned, void**));
-    MOCK_CONST_METHOD3(pci_device_unmap_range,
-                       int(struct pci_device*, void*, pciaddr_t));
+    MOCK_METHOD(struct pci_device_iterator*, pci_id_match_iterator_create,
+                (const struct pci_id_match*), (const, override));
+    MOCK_METHOD(void, pci_iterator_destroy, (struct pci_device_iterator*),
+                (const, override));
+    MOCK_METHOD(void, pci_device_enable, (struct pci_device*),
+                (const, override));
+    MOCK_METHOD(struct pci_device*, pci_device_next,
+                (struct pci_device_iterator*), (const, override));
+    MOCK_METHOD(int, pci_device_probe, (struct pci_device*), (const, override));
+    MOCK_METHOD(int, pci_device_cfg_read_u8,
+                (struct pci_device * dev, std::uint8_t* data, pciaddr_t offset),
+                (const, override));
+    MOCK_METHOD(int, pci_device_cfg_write_u8,
+                (struct pci_device * dev, std::uint8_t data, pciaddr_t offset),
+                (const, override));
+    MOCK_METHOD(int, pci_device_map_range,
+                (struct pci_device*, pciaddr_t, pciaddr_t, unsigned, void**),
+                (const, override));
+    MOCK_METHOD(int, pci_device_unmap_range,
+                (struct pci_device*, void*, pciaddr_t), (const, override));
 };
 
 } // namespace host_tool
diff --git a/tools/test/updater_mock.hpp b/tools/test/updater_mock.hpp
index 05527b2..70fc91a 100644
--- a/tools/test/updater_mock.hpp
+++ b/tools/test/updater_mock.hpp
@@ -14,11 +14,13 @@
 class UpdateHandlerMock : public UpdateHandlerInterface
 {
   public:
-    MOCK_METHOD1(checkAvailable, bool(const std::string&));
-    MOCK_METHOD1(readVersion, std::vector<uint8_t>(const std::string&));
-    MOCK_METHOD2(sendFile, void(const std::string&, const std::string&));
-    MOCK_METHOD2(verifyFile, bool(const std::string&, bool));
-    MOCK_METHOD0(cleanArtifacts, void());
+    MOCK_METHOD(bool, checkAvailable, (const std::string&), (override));
+    MOCK_METHOD(std::vector<uint8_t>, readVersion, (const std::string&),
+                (override));
+    MOCK_METHOD(void, sendFile, (const std::string&, const std::string&),
+                (override));
+    MOCK_METHOD(bool, verifyFile, (const std::string&, bool), (override));
+    MOCK_METHOD(void, cleanArtifacts, (), (override));
 };
 
 } // namespace host_tool
