diff --git a/src/lsa.cpp b/src/lsa.cpp
index 1b5e804..9c05710 100644
--- a/src/lsa.cpp
+++ b/src/lsa.cpp
@@ -59,7 +59,7 @@
 }
 
 std::string
-NameLsa::getData()
+NameLsa::getData() const
 {
   std::ostringstream os;
   os << m_origRouter << "|" << Lsa::Type::NAME << "|" << m_lsSeqNo << "|"
@@ -165,7 +165,7 @@
 }
 
 std::string
-CoordinateLsa::getData()
+CoordinateLsa::getData() const
 {
   std::ostringstream os;
   os << m_origRouter << "|" << Lsa::Type::COORDINATE << "|" << m_lsSeqNo << "|"
@@ -258,7 +258,7 @@
 }
 
 std::string
-AdjLsa::getData()
+AdjLsa::getData() const
 {
   std::ostringstream os;
   os << m_origRouter << "|" << Lsa::Type::ADJACENCY << "|" << m_lsSeqNo << "|"
@@ -402,6 +402,8 @@
     return "COORDINATE";
   case nlsr::Lsa::Type::NAME:
     return "NAME";
+  case nlsr::Lsa::Type::MOCK:
+    return "MOCK";
   default:
     return "BASE";
   }
diff --git a/src/lsa.hpp b/src/lsa.hpp
index dd69d8e..afd97e7 100644
--- a/src/lsa.hpp
+++ b/src/lsa.hpp
@@ -41,7 +41,8 @@
     ADJACENCY,
     COORDINATE,
     NAME,
-    BASE
+    BASE,
+    MOCK
   };
 
   Lsa()
@@ -106,6 +107,12 @@
     return m_expiringEventId;
   }
 
+  virtual std::string
+  getData() const = 0;
+
+  virtual bool
+  initializeFromContent(const std::string& content) = 0;
+
 protected:
   ndn::Name m_origRouter;
   uint32_t m_lsSeqNo;
@@ -168,7 +175,7 @@
     2\>|...|\<prefix n\>|
    */
   std::string
-  getData();
+  getData() const override;
 
   /*! \brief Initializes this LSA object with content's data.
 
@@ -179,7 +186,7 @@
     getData(); getData() returns data of this format, in other words.
    */
   bool
-  initializeFromContent(const std::string& content);
+  initializeFromContent(const std::string& content) override;
 
   bool
   isEqualContent(const NameLsa& other) const;
@@ -239,7 +246,7 @@
     n\>|\<cost n\>|
    */
   std::string
-  getData();
+  getData() const override;
 
   /*! \brief Initializes this adj. LSA from the supplied content.
 
@@ -247,7 +254,7 @@
     according to getData().
    */
   bool
-  initializeFromContent(const std::string& content);
+  initializeFromContent(const std::string& content) override;
 
   uint32_t
   getNoLink()
@@ -317,7 +324,7 @@
     router\>|coordinate|\<seq. no.\>|\<exp. time\>|\<radians\>|\<theta\>|
   */
   std::string
-  getData();
+  getData() const override;
 
   /*! \brief Initializes this coordinate LSA with the data in content.
 
@@ -328,7 +335,7 @@
     same as for getData();
   */
   bool
-  initializeFromContent(const std::string& content);
+  initializeFromContent(const std::string& content) override;
 
   double
   getCorRadius() const
diff --git a/tests/mocks/lsa.cpp b/tests/mocks/lsa.cpp
new file mode 100644
index 0000000..5d495a1
--- /dev/null
+++ b/tests/mocks/lsa.cpp
@@ -0,0 +1,58 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2017,  The University of Memphis,
+ *                           Regents of the University of California,
+ *                           Arizona Board of Regents.
+ *
+ * This file is part of NLSR (Named-data Link State Routing).
+ * See AUTHORS.md for complete list of NLSR authors and contributors.
+ *
+ * NLSR is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+#include "./lsa.hpp"
+
+namespace nlsr {
+namespace test {
+
+std::string
+MockLsa::getData() const
+{
+  return "";
+}
+
+bool
+MockLsa::initializeFromContent(const std::string& content)
+{
+  boost::char_separator<char> sep("|");
+  boost::tokenizer<boost::char_separator<char> >tokens(content, sep);
+  boost::tokenizer<boost::char_separator<char> >::iterator tok_iter =
+    tokens.begin();
+  m_origRouter = ndn::Name(*tok_iter++);
+  if (!(m_origRouter.size() > 0)) {
+    return false;
+  }
+  try {
+    if (*tok_iter++ != std::to_string(Lsa::Type::MOCK)) {
+      return false;
+    }
+    m_lsSeqNo = boost::lexical_cast<uint32_t>(*tok_iter++);
+    m_expirationTimePoint = ndn::time::fromIsoString(*tok_iter++);
+  }
+  catch (const std::exception& e) {
+    return false;
+  }
+  return true;
+}
+
+} // namespace test
+} // namespace nlsr
diff --git a/tests/mocks/lsa.hpp b/tests/mocks/lsa.hpp
new file mode 100644
index 0000000..c447384
--- /dev/null
+++ b/tests/mocks/lsa.hpp
@@ -0,0 +1,51 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2017,  The University of Memphis,
+ *                           Regents of the University of California,
+ *                           Arizona Board of Regents.
+ *
+ * This file is part of NLSR (Named-data Link State Routing).
+ * See AUTHORS.md for complete list of NLSR authors and contributors.
+ *
+ * NLSR is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+#ifndef NLSR_TESTS_MOCKS_LSA_HPP
+#define NLSR_TESTS_MOCKS_LSA_HPP
+
+#include "src/lsa.hpp"
+
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string.hpp>
+#include <boost/lexical_cast.hpp>
+
+namespace nlsr {
+namespace test {
+
+class MockLsa : public Lsa
+{
+public:
+  MockLsa()
+  {
+  }
+
+  std::string
+  getData() const override;
+
+  bool
+  initializeFromContent(const std::string& content) override;
+};
+
+} // namespace test
+} // namespace nlsr
+
+#endif // NLSR_TESTS_MOCKS_LSA_HPP
diff --git a/tests/tlv/test-lsa-info.cpp b/tests/tlv/test-lsa-info.cpp
index a179e2c..eea9b37 100644
--- a/tests/tlv/test-lsa-info.cpp
+++ b/tests/tlv/test-lsa-info.cpp
@@ -20,8 +20,8 @@
  **/
 
 #include "tlv/lsa-info.hpp"
-
 #include "../boost-test.hpp"
+#include "tests/mocks/lsa.hpp"
 
 namespace nlsr {
 namespace tlv {
@@ -125,7 +125,7 @@
 
 BOOST_AUTO_TEST_CASE(LsaInfoMake)
 {
-  Lsa lsa;
+  nlsr::test::MockLsa lsa;
   lsa.setOrigRouter("/test/lsa/info/tlv");
   lsa.setLsSeqNo(128);
   lsa.setExpirationTimePoint(ndn::time::system_clock::now());
