diff --git a/tests/mocks/lsa.cpp b/tests/mocks/lsa.cpp
index 5d495a1..f4f6348 100644
--- a/tests/mocks/lsa.cpp
+++ b/tests/mocks/lsa.cpp
@@ -25,7 +25,7 @@
 namespace test {
 
 std::string
-MockLsa::getData() const
+MockLsa::serialize() const
 {
   return "";
 }
diff --git a/tests/mocks/lsa.hpp b/tests/mocks/lsa.hpp
index c447384..738ad8f 100644
--- a/tests/mocks/lsa.hpp
+++ b/tests/mocks/lsa.hpp
@@ -39,7 +39,7 @@
   }
 
   std::string
-  getData() const override;
+  serialize() const override;
 
   bool
   initializeFromContent(const std::string& content) override;
diff --git a/tests/test-lsa.cpp b/tests/test-lsa.cpp
index c7851f8..f15507d 100644
--- a/tests/test-lsa.cpp
+++ b/tests/test-lsa.cpp
@@ -109,7 +109,7 @@
 
   BOOST_CHECK(clsa1.isEqualContent(clsa2));
 
-  BOOST_CHECK_EQUAL(clsa1.getData(), clsa2.getData());
+  BOOST_CHECK_EQUAL(clsa1.serialize(), clsa2.serialize());
 }
 
 BOOST_AUTO_TEST_CASE(IncrementAdjacentNumber)
@@ -179,7 +179,7 @@
   AdjLsa adjlsa1("router1", 1, testTimePoint, adjList.size(), adjList);
   AdjLsa adjlsa2;
 
-  BOOST_CHECK(adjlsa2.initializeFromContent(adjlsa1.getData()));
+  BOOST_CHECK(adjlsa2.initializeFromContent(adjlsa1.serialize()));
 
   BOOST_CHECK(adjlsa1.isEqualContent(adjlsa2));
 
@@ -195,18 +195,18 @@
   NameLsa nlsa1("router1", 1, testTimePoint, npl1);
   NameLsa nlsa2;
 
-  BOOST_CHECK(nlsa2.initializeFromContent(nlsa1.getData()));
+  BOOST_CHECK(nlsa2.initializeFromContent(nlsa1.serialize()));
 
-  BOOST_CHECK_EQUAL(nlsa1.getData(), nlsa2.getData());
+  BOOST_CHECK_EQUAL(nlsa1.serialize(), nlsa2.serialize());
 
   //Coordinate LSA
   std::vector<double> angles = {30, 40.0};
   CoordinateLsa clsa1("router1", 12, testTimePoint, 2.5, angles);
   CoordinateLsa clsa2;
 
-  BOOST_CHECK(clsa2.initializeFromContent(clsa1.getData()));
+  BOOST_CHECK(clsa2.initializeFromContent(clsa1.serialize()));
 
-  BOOST_CHECK_EQUAL(clsa1.getData(), clsa2.getData());
+  BOOST_CHECK_EQUAL(clsa1.serialize(), clsa2.serialize());
 }
 
 BOOST_AUTO_TEST_SUITE(TestNameLsa)
diff --git a/tests/test-lsdb.cpp b/tests/test-lsdb.cpp
index e04c74b..2a4d11c 100644
--- a/tests/test-lsdb.cpp
+++ b/tests/test-lsdb.cpp
@@ -180,11 +180,11 @@
   ndn::Name prefix("/ndn/edu/memphis/netlab/research/nlsr/test/prefix/");
 
   int nPrefixes = 0;
-  while (lsa.getData().size() < ndn::MAX_NDN_PACKET_SIZE) {
+  while (lsa.serialize().size() < ndn::MAX_NDN_PACKET_SIZE) {
     lsa.addName(ndn::Name(prefix).appendNumber(++nPrefixes));
   }
 
-  std::string expectedDataContent = lsa.getData();
+  std::string expectedDataContent = lsa.serialize();
   lsdb.installNameLsa(lsa);
 
   ndn::Name interestName("/ndn/NLSR/LSA/cs/%C1.Router/router1/NAME/");
@@ -226,14 +226,14 @@
   ndn::Name interestName("/ndn/NLSR/LSA/cs/%C1.Router/router1/NAME/");
   interestName.appendNumber(seqNo);
 
-  const ndn::ConstBufferPtr bufferPtr = std::make_shared<ndn::Buffer>(lsa.getData().c_str(),
-                                                                 lsa.getData().size());
+  const ndn::ConstBufferPtr bufferPtr = std::make_shared<ndn::Buffer>(lsa.serialize().c_str(),
+                                                                 lsa.serialize().size());
   lsdb.afterFetchLsa(bufferPtr, interestName);
 
   NameLsa* foundLsa = lsdb.findNameLsa(lsa.getKey());
   BOOST_REQUIRE(foundLsa != nullptr);
 
-  BOOST_CHECK_EQUAL(foundLsa->getData(), lsa.getData());
+  BOOST_CHECK_EQUAL(foundLsa->serialize(), lsa.serialize());
 }
 
 BOOST_AUTO_TEST_CASE(LsdbRemoveAndExists)
diff --git a/tests/test-statistics.cpp b/tests/test-statistics.cpp
index ad2f0d9..bc029e1 100644
--- a/tests/test-statistics.cpp
+++ b/tests/test-statistics.cpp
@@ -296,8 +296,8 @@
   AdjLsa aLsa(routerName, seqNo, MAX_TIME, 1, nlsr.getAdjacencyList());
   lsdb.installAdjLsa(aLsa);
 
-  const ndn::ConstBufferPtr aBuffer = std::make_shared<ndn::Buffer>(aLsa.getData().c_str(),
-                                                                    aLsa.getData().size());
+  const ndn::ConstBufferPtr aBuffer = std::make_shared<ndn::Buffer>(aLsa.serialize().c_str(),
+                                                                    aLsa.serialize().size());
   lsdb.afterFetchLsa(aBuffer, adjInterest);
   BOOST_CHECK_EQUAL(collector.getStatistics().get(Statistics::PacketType::RCV_ADJ_LSA_DATA), 1);
 
@@ -308,8 +308,8 @@
   CoordinateLsa cLsa(routerName, seqNo, MAX_TIME, 2.5, angles);
   lsdb.installCoordinateLsa(cLsa);
 
-  const ndn::ConstBufferPtr cBuffer = std::make_shared<ndn::Buffer>(cLsa.getData().c_str(),
-                                                                   cLsa.getData().size());
+  const ndn::ConstBufferPtr cBuffer = std::make_shared<ndn::Buffer>(cLsa.serialize().c_str(),
+                                                                   cLsa.serialize().size());
   lsdb.afterFetchLsa(cBuffer, coordInterest);
   BOOST_CHECK_EQUAL(collector.getStatistics().get(Statistics::PacketType::RCV_COORD_LSA_DATA), 1);
 
@@ -319,8 +319,8 @@
   NameLsa nLsa(routerName, seqNo, MAX_TIME, nlsr.getNamePrefixList());
   lsdb.installNameLsa(nLsa);
 
-  const ndn::ConstBufferPtr nBuffer = std::make_shared<ndn::Buffer>(nLsa.getData().c_str(),
-                                                                   nLsa.getData().size());
+  const ndn::ConstBufferPtr nBuffer = std::make_shared<ndn::Buffer>(nLsa.serialize().c_str(),
+                                                                   nLsa.serialize().size());
   lsdb.afterFetchLsa(nBuffer, interestName);
   BOOST_CHECK_EQUAL(collector.getStatistics().get(Statistics::PacketType::RCV_NAME_LSA_DATA), 1);
 
