diff --git a/tests/ping/client/ping.t.cpp b/tests/ping/client/ping.t.cpp
index 67d7ddc..cef62d6 100644
--- a/tests/ping/client/ping.t.cpp
+++ b/tests/ping/client/ping.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Arizona Board of Regents.
+ * Copyright (c) 2014-2020,  Arizona Board of Regents.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -20,6 +20,8 @@
 #include "tools/ping/client/ping.hpp"
 
 #include "tests/test-common.hpp"
+#include "tests/io-fixture.hpp"
+
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
 namespace ndn {
@@ -34,20 +36,18 @@
 
 using ping::client::Ping;
 
-BOOST_FIXTURE_TEST_CASE(Basic, UnitTestTimeFixture)
+BOOST_FIXTURE_TEST_CASE(Basic, IoFixture)
 {
+  util::DummyClientFace face(m_io, {true, true});
   Options pingOptions;
-  pingOptions.prefix = "ndn:/test-prefix";
+  pingOptions.prefix = "/test-prefix";
   pingOptions.shouldAllowStaleData = false;
   pingOptions.shouldGenerateRandomSeq = false;
   pingOptions.shouldPrintTimestamp = false;
   pingOptions.nPings = 4;
-  pingOptions.interval = time::milliseconds(100);
-  pingOptions.timeout = time::milliseconds(2000);
+  pingOptions.interval = 100_ms;
+  pingOptions.timeout = 2_s;
   pingOptions.startSeq = 1000;
-
-  boost::asio::io_service io;
-  util::DummyClientFace face(io, {true, true});
   Ping ping(face, pingOptions);
 
   int nFinishSignals = 0;
@@ -73,29 +73,24 @@
 
   ping.start();
 
-  this->advanceClocks(io, time::milliseconds(1), 500);
+  this->advanceClocks(1_ms, 500);
   BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 4);
 
   auto data = makeData("/test-prefix/ping/1000");
   data->setFreshnessPeriod(1_s);
   face.receive(*data);
 
-  lp::Nack nack(face.sentInterests[1]);
-  nack.setReason(lp::NackReason::DUPLICATE);
-  face.receive(nack);
+  face.receive(makeNack(face.sentInterests[1], lp::NackReason::DUPLICATE));
 
   data = makeData("/test-prefix/ping/1002");
   data->setFreshnessPeriod(1_s);
   face.receive(*data);
 
-  this->advanceClocks(io, time::milliseconds(100), 20);
+  this->advanceClocks(100_ms, 20);
 
-  // ndn:/test-prefix/ping/1003 is unanswered and will timeout
+  // /test-prefix/ping/1003 is unanswered and will timeout
 
   BOOST_CHECK_EQUAL(nFinishSignals, 1);
-
-  face.shutdown();
-  io.stop();
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestPing
diff --git a/tests/ping/integrated.t.cpp b/tests/ping/integrated.t.cpp
index 84c13e5..eafc52b 100644
--- a/tests/ping/integrated.t.cpp
+++ b/tests/ping/integrated.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2015-2018,  Arizona Board of Regents.
+ * Copyright (c) 2015-2020,  Arizona Board of Regents.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -17,10 +17,13 @@
  * ndn-tools, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "tools/ping/server/ping-server.hpp"
 #include "tools/ping/client/ping.hpp"
+#include "tools/ping/server/ping-server.hpp"
 
-#include "tests/identity-management-fixture.hpp"
+#include "tests/test-common.hpp"
+#include "tests/io-fixture.hpp"
+#include "tests/key-chain-fixture.hpp"
+
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
 namespace ndn {
@@ -29,25 +32,25 @@
 
 using namespace ndn::tests;
 
-class PingIntegratedFixture : public IdentityManagementTimeFixture
+class PingIntegratedFixture : public IoFixture, public KeyChainFixture
 {
 public:
   PingIntegratedFixture()
-    : serverFace(io, m_keyChain, {false, true})
-    , clientFace(io, m_keyChain, {false, true})
+    : serverFace(m_io, m_keyChain, {false, true})
+    , clientFace(m_io, m_keyChain, {false, true})
     , wantLoss(false)
   {
     serverFace.onSendInterest.connect([this] (const Interest& interest) {
-      io.post([=] { if (!wantLoss) { clientFace.receive(interest); } });
+      m_io.post([=] { if (!wantLoss) { clientFace.receive(interest); } });
     });
     clientFace.onSendInterest.connect([this] (const Interest& interest) {
-      io.post([=] { if (!wantLoss) { serverFace.receive(interest); } });
+      m_io.post([=] { if (!wantLoss) { serverFace.receive(interest); } });
     });
     serverFace.onSendData.connect([this] (const Data& data) {
-      io.post([=] { if (!wantLoss) { clientFace.receive(data); } });
+      m_io.post([=] { if (!wantLoss) { clientFace.receive(data); } });
     });
     clientFace.onSendData.connect([this] (const Data& data) {
-      io.post([=] { if (!wantLoss) { serverFace.receive(data); } });
+      m_io.post([=] { if (!wantLoss) { serverFace.receive(data); } });
     });
   }
 
@@ -55,11 +58,10 @@
   {
     serverFace.shutdown();
     clientFace.shutdown();
-    io.stop();
+    m_io.stop();
   }
 
 public:
-  boost::asio::io_service io;
   util::DummyClientFace serverFace;
   util::DummyClientFace clientFace;
   std::unique_ptr<server::PingServer> server;
@@ -92,11 +94,11 @@
   clientOpts.timeout = 2_s;
   clientOpts.startSeq = 1000;
   client = make_unique<client::Ping>(clientFace, clientOpts);
-  client->afterFinish.connect(bind(&PingIntegratedFixture::onFinish, this));
+  client->afterFinish.connect([this] { onFinish(); });
   client->start();
 
-  advanceClocks(io, 1_ms, 400);
-  io.run();
+  advanceClocks(1_ms, 400);
+  m_io.run();
 
   BOOST_CHECK_EQUAL(4, server->getNPings());
 }
@@ -125,11 +127,11 @@
   clientOpts.timeout = 500_ms;
   clientOpts.startSeq = 1000;
   client = make_unique<client::Ping>(clientFace, clientOpts);
-  client->afterFinish.connect(bind(&PingIntegratedFixture::onFinish, this));
+  client->afterFinish.connect([this] { onFinish(); });
   client->start();
 
-  advanceClocks(io, 1_ms, 1000);
-  io.run();
+  advanceClocks(1_ms, 1000);
+  m_io.run();
 
   BOOST_CHECK_EQUAL(0, server->getNPings());
 }
diff --git a/tests/ping/server/ping-server.t.cpp b/tests/ping/server/ping-server.t.cpp
index 1fe5b35..f7ff66f 100644
--- a/tests/ping/server/ping-server.t.cpp
+++ b/tests/ping/server/ping-server.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Arizona Board of Regents.
+ * Copyright (c) 2014-2020,  Arizona Board of Regents.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -20,7 +20,8 @@
 #include "tools/ping/server/ping-server.hpp"
 
 #include "tests/test-common.hpp"
-#include "../../identity-management-fixture.hpp"
+#include "tests/io-fixture.hpp"
+#include "tests/key-chain-fixture.hpp"
 
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
@@ -34,11 +35,11 @@
 BOOST_AUTO_TEST_SUITE(Ping)
 BOOST_AUTO_TEST_SUITE(TestPingServer)
 
-class CreatePingServerFixture : public IdentityManagementTimeFixture
+class CreatePingServerFixture : public IoFixture, public KeyChainFixture
 {
 protected:
   CreatePingServerFixture()
-    : face(io, m_keyChain, {false, true})
+    : face(m_io, m_keyChain, {false, true})
     , pingOptions(makeOptions())
     , pingServer(face, m_keyChain, pingOptions)
   {
@@ -72,7 +73,6 @@
   }
 
 protected:
-  boost::asio::io_service io;
   util::DummyClientFace face;
   Options pingOptions;
   PingServer pingServer;
@@ -83,12 +83,12 @@
   BOOST_REQUIRE_EQUAL(0, pingServer.getNPings());
   pingServer.start();
 
-  advanceClocks(io, 1_ms, 200);
+  advanceClocks(1_ms, 200);
 
   face.receive(makePingInterest(1000));
   face.receive(makePingInterest(1001));
 
-  io.run();
+  m_io.run();
 
   BOOST_CHECK_EQUAL(2, pingServer.getNPings());
 }
