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());
