diff --git a/tests/core/manager-base.t.cpp b/tests/core/manager-base.t.cpp
index 49f8b98..947727c 100644
--- a/tests/core/manager-base.t.cpp
+++ b/tests/core/manager-base.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017,  Regents of the University of California,
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -24,13 +24,13 @@
  */
 
 #include "core/manager-base.hpp"
-#include "manager-common-fixture.hpp"
+#include "tests/manager-common-fixture.hpp"
 
+#include <ndn-cxx/mgmt/nfd/control-command.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
 #include <ndn-cxx/security/pib/identity.hpp>
 #include <ndn-cxx/security/pib/key.hpp>
 #include <ndn-cxx/security/pib/pib.hpp>
-#include <ndn-cxx/mgmt/nfd/control-command.hpp>
 
 namespace nfd {
 namespace tests {
diff --git a/tests/daemon/face/generic-link-service.t.cpp b/tests/daemon/face/generic-link-service.t.cpp
index 3d803a1..dfb048c 100644
--- a/tests/daemon/face/generic-link-service.t.cpp
+++ b/tests/daemon/face/generic-link-service.t.cpp
@@ -26,8 +26,8 @@
 #include "face/generic-link-service.hpp"
 #include "face/face.hpp"
 
-#include "test-common.hpp"
 #include "dummy-transport.hpp"
+#include "tests/test-common.hpp"
 
 #include <ndn-cxx/lp/empty-value.hpp>
 #include <ndn-cxx/lp/prefix-announcement.hpp>
diff --git a/tests/other/wscript b/tests/other/wscript
index 926ba9d..3c6d1c0 100644
--- a/tests/other/wscript
+++ b/tests/other/wscript
@@ -1,7 +1,6 @@
 # -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-
 """
-Copyright (c) 2014-2016,  Regents of the University of California,
+Copyright (c) 2014-2018,  Regents of the University of California,
                           Arizona Board of Regents,
                           Colorado State University,
                           University Pierre & Marie Curie, Sorbonne University,
@@ -30,29 +29,21 @@
     for module, name in {"cs-benchmark": "CS Benchmark",
                          "pit-fib-benchmark": "PIT & FIB Benchmark"}.items():
         # main
-        bld(target='unit-tests-%s-main' % module,
-            name='unit-tests-%s-main' % module,
-            features='cxx',
-            source='../main.cpp',
-            use='BOOST',
-            defines=['BOOST_TEST_MODULE=%s' % name]
-            )
-
+        bld.objects(target='other-tests-%s-main' % module,
+                    source='../main.cpp',
+                    use='BOOST',
+                    defines=['BOOST_TEST_MODULE=%s' % name])
         # module
-        bld.program(target='../../%s' % module,
-                    features='cxx cxxprogram',
-                    source=bld.path.ant_glob(['%s*.cpp' % module]),
-                    use='daemon-objects unit-tests-base unit-tests-%s-main' % module,
-                    includes='.',
-                    install_path=None,
-                    defines=['UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % bld.bldnode]
-                    )
+        bld.program(name=module,
+                    target='../../%s' % module,
+                    source=bld.path.ant_glob('%s*.cpp' % module),
+                    use='daemon-objects unit-tests-base other-tests-%s-main' % module,
+                    defines=['UNIT_TEST_CONFIG_PATH="%s"' % bld.bldnode.make_node('tmp-files')],
+                    install_path=None)
 
     # face-benchmark does not rely on Boost.Test
-    bld.program(target='../../face-benchmark',
-                features='cxx cxxprogram',
-                source=bld.path.ant_glob(['face-benchmark*.cpp']),
+    bld.program(name='face-benchmark',
+                target='../../face-benchmark',
+                source=bld.path.ant_glob('face-benchmark*.cpp'),
                 use='daemon-objects',
-                includes='.',
-                install_path=None
-                )
+                install_path=None)
diff --git a/tests/rib/rib-manager.t.cpp b/tests/rib/rib-manager.t.cpp
index e141368..55ae1c8 100644
--- a/tests/rib/rib-manager.t.cpp
+++ b/tests/rib/rib-manager.t.cpp
@@ -24,9 +24,10 @@
  */
 
 #include "rib/rib-manager.hpp"
-#include "manager-common-fixture.hpp"
 #include "core/fib-max-depth.hpp"
 
+#include "tests/manager-common-fixture.hpp"
+
 #include <ndn-cxx/lp/tags.hpp>
 #include <ndn-cxx/mgmt/nfd/face-event-notification.hpp>
 #include <ndn-cxx/mgmt/nfd/face-status.hpp>
diff --git a/tests/wscript b/tests/wscript
index 0ab7ec6..7e9300f 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -1,7 +1,6 @@
 # -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-
 """
-Copyright (c) 2014-2016,  Regents of the University of California,
+Copyright (c) 2014-2018,  Regents of the University of California,
                           Arizona Board of Regents,
                           Colorado State University,
                           University Pierre & Marie Curie, Sorbonne University,
@@ -28,55 +27,49 @@
 
 def build(bld):
     # Unit tests
-    if bld.env['WITH_TESTS']:
+    if bld.env.WITH_TESTS:
+        config_path = 'UNIT_TEST_CONFIG_PATH="%s"' % bld.bldnode.make_node('tmp-files')
 
-        # common test modules
-        unit_test_base = bld(
+        # common test objects
+        bld.objects(
             target='unit-tests-base',
-            name='unit-tests-base',
-            features='cxx pch',
-            source=bld.path.ant_glob(['*.cpp'], excl='main.cpp'),
+            features='pch',
+            source=bld.path.ant_glob('*.cpp', excl='main.cpp'),
             use='core-objects',
             headers='../core/common.hpp boost-test.hpp',
-            defines='UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % bld.bldnode,
-          )
+            defines=[config_path])
 
         for module, name in {"core": "Core Tests",
                              "daemon": "Daemon Tests",
                              "rib": "RIB Tests",
                              "tools": "Tools Tests"}.items():
-            # main()
-            bld(target='unit-tests-%s-main' % module,
-                name='unit-tests-%s-main' % module,
-                features='cxx',
-                use='BOOST',
-                source='main.cpp',
-                defines=['BOOST_TEST_MODULE=%s' % name]
-              )
+            # main() for the module
+            bld.objects(target='unit-tests-%s-main' % module,
+                        source='main.cpp',
+                        use='BOOST',
+                        defines=['BOOST_TEST_MODULE=%s' % name])
+
+            node = bld.path.find_dir(module)
+            src = node.ant_glob('**/*.cpp', excl=['face/*ethernet*.cpp',
+                                                  'face/pcap*.cpp',
+                                                  'face/unix*.cpp',
+                                                  'face/websocket*.cpp'])
+            if bld.env.HAVE_LIBPCAP:
+                src += node.ant_glob('face/*ethernet*.cpp')
+                src += node.ant_glob('face/pcap*.cpp')
+            if bld.env.HAVE_UNIX_SOCKETS:
+                src += node.ant_glob('face/unix*.cpp')
+            if bld.env.HAVE_WEBSOCKET:
+                src += node.ant_glob('face/websocket*.cpp')
 
             # unit-tests-%module
-            unit_tests = bld.program(
-                target='../unit-tests-%s' % module,
-                features='cxx cxxprogram',
-                source=bld.path.ant_glob(['%s/**/*.cpp' % module],
-                                         excl=['%s/**/ethernet*.cpp' % module,
-                                               '%s/**/unix*.cpp' % module,
-                                               '%s/**/websocket*.cpp' % module]),
-                use='%s-objects unit-tests-base unit-tests-%s-main' % (module, module),
-                includes='.',
-                install_path=None,
-                defines='UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % bld.bldnode,
-              )
+            bld.program(name='unit-tests-%s' % module,
+                        target='../unit-tests-%s' % module,
+                        source=src,
+                        use='%s-objects unit-tests-base unit-tests-%s-main' % (module, module),
+                        defines=[config_path],
+                        install_path=None)
 
-            if bld.env['HAVE_LIBPCAP']:
-                unit_tests.source += bld.path.ant_glob('%s/**/ethernet*.cpp' % module)
-
-            if bld.env['HAVE_UNIX_SOCKETS']:
-                unit_tests.source += bld.path.ant_glob('%s/**/unix*.cpp' % module)
-
-            if bld.env['HAVE_WEBSOCKET']:
-                unit_tests.source += bld.path.ant_glob('%s/**/websocket*.cpp' % module)
-
-    # Other tests (e.g., stress tests that can be enabled even if unit tests are disabled)
-    if bld.env['WITH_TESTS'] or bld.env['WITH_OTHER_TESTS']:
-        bld.recurse("other")
+    # Other tests (e.g., stress tests and benchmarks that can be enabled even if unit tests are disabled)
+    if bld.env.WITH_TESTS or bld.env.WITH_OTHER_TESTS:
+        bld.recurse('other')
