diff --git a/SimpleTests/MeshTests/MPI/CMakeLists.txt b/SimpleTests/MeshTests/MPI/CMakeLists.txt
index 6ba0f5d7ce4631bc82aa3e1ff915b6b8b5f36255..1190c8e07dd5badf5475968ae9fa39ea7e8b1be1 100644
--- a/SimpleTests/MeshTests/MPI/CMakeLists.txt
+++ b/SimpleTests/MeshTests/MPI/CMakeLists.txt
@@ -23,7 +23,7 @@ AddTest(
 	NAME NodePartitionedMeshTestASCII
 	PATH NodePartitionedMesh/ASCII
 	EXECUTABLE test_node_partitioned_mesh
-	EXECUTABLE_ARGS mesh_3d
+	EXECUTABLE_ARGS "mesh_3d ${Data_BINARY_DIR}/NodePartitionedMesh/ASCII"
 	WRAPPER mpirun
 	WRAPPER_ARGS "-np 3"
 	TESTER diff
@@ -34,7 +34,7 @@ AddTest(
 	NAME NodePartitionedMeshTestBinary
 	PATH NodePartitionedMesh/Binary
 	EXECUTABLE test_node_partitioned_mesh
-	EXECUTABLE_ARGS mesh_3d
+	EXECUTABLE_ARGS "mesh_3d ${Data_BINARY_DIR}/NodePartitionedMesh/Binary"
 	WRAPPER mpirun
 	WRAPPER_ARGS "-np 3"
 	TESTER diff
@@ -80,4 +80,3 @@ AddTest(
 		cube_1e3_neumann_result_pcs_0_ts_1_1.vtu
 		cube_1e3_neumann_result_pcs_0_ts_1_2.vtu
 )
-
diff --git a/SimpleTests/MeshTests/MPI/NodePartitionedMeshTester.cpp b/SimpleTests/MeshTests/MPI/NodePartitionedMeshTester.cpp
index 911482af4b74a4cdf501ace8f3c7063e4ab7fd1f..2e816c183d434a810e9371f8afd8354291f1c544 100644
--- a/SimpleTests/MeshTests/MPI/NodePartitionedMeshTester.cpp
+++ b/SimpleTests/MeshTests/MPI/NodePartitionedMeshTester.cpp
@@ -23,6 +23,7 @@
 
 #include "logog/include/logog.hpp"
 
+#include "BaseLib/FileTools.h"
 #include "BaseLib/LogogCustomCout.h"
 #include "BaseLib/TemplateLogogFormatterSuppressedGCC.h"
 
@@ -53,6 +54,9 @@ int main(int argc, char *argv[])
     out->SetFormatter(*fmt);
 
     const std::string file_name = argv[1];
+    std::string output_dir = "";
+    if (argc > 2)
+      output_dir = argv[2];
 
     NodePartitionedMesh *mesh = nullptr;
     {
@@ -69,7 +73,7 @@ int main(int argc, char *argv[])
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     const std::string rank_str = std::to_string(rank);
     const std::string ofile_name = file_name + "_partition_" + rank_str + ".msh";
-    std::ofstream os(ofile_name.data(), std::ios::trunc);
+    std::ofstream os(BaseLib::joinPaths(output_dir, ofile_name), std::ios::trunc);
 
     // Output nodes
     os.setf(std::ios::scientific, std::ios::floatfield);
@@ -111,4 +115,3 @@ int main(int argc, char *argv[])
 
     LOGOG_SHUTDOWN();
 }
-
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index b3948ae53c0f8c73ca8bba720f5163529d087ad4..fb9498e22414dbc4a99329951f65c6a9c70c2b80 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -8,8 +8,9 @@
 #   NAME <name of the the test>
 #   PATH <working directory> # relative to SourceDir/Tests/Data
 #   EXECUTABLE <executable target> # optional, defaults to ogs
-#   EXECUTABLE_ARGS <arguments> # files referenced in the DATA argument can be used here
+#   EXECUTABLE_ARGS <arguments>
 #   WRAPPER <time|memcheck|callgrind> # optional, defaults to time
+#   WRAPPER_ARGS <arguments> # optional
 #   TESTER <diff|memcheck> # optional
 #   DATA <list of all required data files, white-space separated, have to be in PATH>
 # )
@@ -37,7 +38,6 @@ function (AddTest)
 	set(multiValueArgs EXECUTABLE_ARGS DATA DIFF_DATA WRAPPER_ARGS)
 	cmake_parse_arguments(AddTest "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
-	# TODO set to submodule
 	set(AddTest_SOURCE_PATH "${Data_SOURCE_DIR}/${AddTest_PATH}")
 	set(AddTest_BINARY_PATH "${Data_BINARY_DIR}/${AddTest_PATH}")
 	file(MAKE_DIRECTORY ${AddTest_BINARY_PATH})