diff --git a/.gitmodules b/.gitmodules
index db0905b3dc..1f0b80768b 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 1edd7041f4..e825ff85d7 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 0000000000..c984fc3ecd
--- /dev/null
+++ b/externals/catch
@@ -0,0 +1 @@
+Subproject commit c984fc3ecde60b59efa2203e82261acac8ac8502
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index de4fe716a8..1e12451607 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 0000000000..dc476616c8
--- /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 0000000000..73978676f1
--- /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.