diff --git a/test/elog_errorwrap_test.cpp b/test/elog_errorwrap_test.cpp
index c94c638..5c6f0d6 100644
--- a/test/elog_errorwrap_test.cpp
+++ b/test/elog_errorwrap_test.cpp
@@ -9,7 +9,7 @@
 
 TEST_F(TestLogManager, logCap)
 {
-    for (auto i = 0; i < ERROR_INFO_CAP + 20; i++)
+    for (size_t i = 0; i < ERROR_INFO_CAP + 20; i++)
     {
         manager.commitWithLvl(i, "FOO", 6);
     }
@@ -18,7 +18,7 @@
     // ERROR_INFO_CAP
     EXPECT_EQ(ERROR_INFO_CAP, manager.getInfoErrSize());
 
-    for (auto i = 0; i < ERROR_CAP + 20; i++)
+    for (size_t i = 0; i < ERROR_CAP + 20; i++)
     {
         manager.commitWithLvl(i, "FOO", 0);
     }
diff --git a/test/elog_errorwrap_test.hpp b/test/elog_errorwrap_test.hpp
index 812b3cf..d5a4b33 100644
--- a/test/elog_errorwrap_test.hpp
+++ b/test/elog_errorwrap_test.hpp
@@ -25,6 +25,8 @@
 class journalInterface
 {
   public:
+    virtual ~journalInterface() = default;
+
     virtual void journalSync() = 0;
     virtual int sd_journal_open(sd_journal** j, int k) = 0;
     virtual int sd_journal_get_data(sd_journal* j, const char* transactionIdVar,
@@ -42,7 +44,7 @@
     void sd_journal_close(sd_journal* j);
 };
 
-int journalImpl::sd_journal_open(sd_journal** j, int k)
+int journalImpl::sd_journal_open(sd_journal**, int)
 {
     return 1;
 }
@@ -52,14 +54,13 @@
     return;
 }
 
-int journalImpl::sd_journal_get_data(sd_journal* j,
-                                     const char* transactionIdVar,
-                                     const void** data, size_t length)
+int journalImpl::sd_journal_get_data(sd_journal*, const char*, const void**,
+                                     size_t)
 {
     return 1;
 }
 
-void journalImpl::sd_journal_close(sd_journal* j)
+void journalImpl::sd_journal_close(sd_journal*)
 {
     return;
 }
diff --git a/test/extensions_test.cpp b/test/extensions_test.cpp
index 6dfe9be..31115af 100644
--- a/test/extensions_test.cpp
+++ b/test/extensions_test.cpp
@@ -15,53 +15,55 @@
 Extensions::DefaultErrorCaps Extensions::defaultErrorCaps =
     Extensions::DefaultErrorCaps::enable;
 
-void startup1(internal::Manager& manager)
+void startup1(internal::Manager& /*manager*/)
 {
 }
 
-void startup2(internal::Manager& manager)
+void startup2(internal::Manager& /*manager*/)
 {
 }
 
-void create1(const std::string& message, uint32_t id, uint64_t timestamp,
-             Entry::Level severity, const AdditionalDataArg& additionalData,
-             const AssociationEndpointsArg& assocs, const FFDCArg& ffdc)
+void create1(const std::string& /*message*/, uint32_t /*id*/,
+             uint64_t /*timestamp*/, Entry::Level /*severity*/,
+             const AdditionalDataArg& /*additionalData*/,
+             const AssociationEndpointsArg& /*assocs*/, const FFDCArg& /*ffdc*/)
 {
 }
 
-void create2(const std::string& message, uint32_t id, uint64_t timestamp,
-             Entry::Level severity, const AdditionalDataArg& additionalData,
-             const AssociationEndpointsArg& assocs, const FFDCArg& ffdc)
+void create2(const std::string& /*message*/, uint32_t /*id*/,
+             uint64_t /*timestamp*/, Entry::Level /*severity*/,
+             const AdditionalDataArg& /*additionalData*/,
+             const AssociationEndpointsArg& /*assocs*/, const FFDCArg& /*ffdc*/)
 {
 }
 
-void deleteLog1(uint32_t id)
+void deleteLog1(uint32_t /*id*/)
 {
 }
 
-void deleteLog2(uint32_t id)
+void deleteLog2(uint32_t /*id*/)
 {
 }
 
-void deleteProhibited1(uint32_t id, bool& prohibited)
+void deleteProhibited1(uint32_t /*id*/, bool& prohibited)
 {
     prohibited = true;
 }
 
-void deleteProhibited2(uint32_t id, bool& prohibited)
+void deleteProhibited2(uint32_t /*id*/, bool& prohibited)
 {
     prohibited = true;
 }
 
-DISABLE_LOG_ENTRY_CAPS();
-REGISTER_EXTENSION_FUNCTION(startup1);
-REGISTER_EXTENSION_FUNCTION(startup2);
-REGISTER_EXTENSION_FUNCTION(create1);
-REGISTER_EXTENSION_FUNCTION(create2);
-REGISTER_EXTENSION_FUNCTION(deleteProhibited1);
-REGISTER_EXTENSION_FUNCTION(deleteProhibited2);
-REGISTER_EXTENSION_FUNCTION(deleteLog1);
-REGISTER_EXTENSION_FUNCTION(deleteLog2);
+DISABLE_LOG_ENTRY_CAPS()
+REGISTER_EXTENSION_FUNCTION(startup1)
+REGISTER_EXTENSION_FUNCTION(startup2)
+REGISTER_EXTENSION_FUNCTION(create1)
+REGISTER_EXTENSION_FUNCTION(create2)
+REGISTER_EXTENSION_FUNCTION(deleteProhibited1)
+REGISTER_EXTENSION_FUNCTION(deleteProhibited2)
+REGISTER_EXTENSION_FUNCTION(deleteLog1)
+REGISTER_EXTENSION_FUNCTION(deleteLog2)
 
 TEST(ExtensionsTest, FunctionCallTest)
 {
