diff --git a/.gitmodules b/.gitmodules
index db0905b3dcea42d4a0382db6b251c86238e1df15..1f0b80768b14d90b09a948c6a33e041285253fed 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,6 @@
 [submodule "soundtouch"]
 	path = externals/soundtouch
 	url = https://github.com/citra-emu/ext-soundtouch.git
+[submodule "catch"]
+	path = externals/catch
+	url = https://github.com/philsquared/Catch.git
diff --git a/appveyor.yml b/appveyor.yml
index 1edd7041f4843f6ee1e235f1d48355280199ad7a..e825ff85d7e970e225d38bac71c1a7cf26dd4b60 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -22,6 +22,10 @@ before_build:
   - cmake -G "Visual Studio 14 2015 Win64" -DCITRA_USE_BUNDLED_QT=1 -DCITRA_USE_BUNDLED_SDL2=1 ..
   - cd ..
 
+build:
+  project: build/citra.sln
+  parallel: true
+
 after_build:
     # copying the needed QT Dlls is now done post build. See the CMakeLists.txt file in the citra-qt folder
   - ps: >
diff --git a/externals/catch b/externals/catch
new file mode 160000
index 0000000000000000000000000000000000000000..c984fc3ecde60b59efa2203e82261acac8ac8502
--- /dev/null
+++ b/externals/catch
@@ -0,0 +1 @@
+Subproject commit c984fc3ecde60b59efa2203e82261acac8ac8502
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index de4fe716a83c9f4660820b34cb749f8a5dcfe14c..1e12451607ec97bea6a36065d8dd6016da68c562 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,6 +5,7 @@ add_subdirectory(common)
 add_subdirectory(core)
 add_subdirectory(video_core)
 add_subdirectory(audio_core)
+add_subdirectory(tests)
 if (ENABLE_SDL2)
     add_subdirectory(citra)
 endif()
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dc476616c82d76ea78f396146dbc455c97539246
--- /dev/null
+++ b/src/tests/CMakeLists.txt
@@ -0,0 +1,14 @@
+set(SRCS
+            tests.cpp
+            )
+
+set(HEADERS
+            )
+
+create_directory_groups(${SRCS} ${HEADERS})
+
+include_directories(../../externals/catch/single_include/)
+
+add_executable(tests ${SRCS} ${HEADERS})
+target_link_libraries(tests core video_core audio_core common)
+target_link_libraries(tests ${PLATFORM_LIBRARIES})
diff --git a/src/tests/tests.cpp b/src/tests/tests.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..73978676f143927995be79e15cc9ab756308a187
--- /dev/null
+++ b/src/tests/tests.cpp
@@ -0,0 +1,9 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#define CATCH_CONFIG_MAIN
+#include <catch.hpp>
+
+// Catch provides the main function since we've given it the
+// CATCH_CONFIG_MAIN preprocessor directive.